Ruby on rails 4 在gem中为rails 4构建发电机
我已经看过并尝试了各种各样的东西来创造一个带有发电机的宝石。也许是我的疲劳让我忘记了什么,也许是因为我缺乏经验。无论是哪种方式,我都试图理解如何构建一个简单生成器的gem,以便在将来的项目中重用代码。是的,我正在构建一些已经存在的东西,但作为一名学习者,我更感兴趣的是理解如何构建一个gem,以便我能够在未来贡献一些更有意义的东西,而不是仅仅使用已经制作好的gem,而不知道到底发生了什么。因此,在没有进一步ado的情况下,我的代码如下所示:Ruby on rails 4 在gem中为rails 4构建发电机,ruby-on-rails-4,gem,rails-generators,Ruby On Rails 4,Gem,Rails Generators,我已经看过并尝试了各种各样的东西来创造一个带有发电机的宝石。也许是我的疲劳让我忘记了什么,也许是因为我缺乏经验。无论是哪种方式,我都试图理解如何构建一个简单生成器的gem,以便在将来的项目中重用代码。是的,我正在构建一些已经存在的东西,但作为一名学习者,我更感兴趣的是理解如何构建一个gem,以便我能够在未来贡献一些更有意义的东西,而不是仅仅使用已经制作好的gem,而不知道到底发生了什么。因此,在没有进一步ado的情况下,我的代码如下所示: tree for simpauth -lib -gen
tree for simpauth
-lib
-generators
-simpauth
-templates
sessions.rb
install_generator.rb
-simpauth
simpauth.rb
这是我的generators/simpauth/install_generator.rb代码
require 'rails/generators'
module Simpauth
class InstallGenerator < ::Rails::Generators::Base
source_root File.expand_path('../templates', __FILE__)
desc "Creating simple and customizable authentication"
def add_session
copy_file "sessions.rb", "app/controllers/sessions_controller.rb"
end
end
end
任何帮助都将不胜感激
编辑-此代码在rails应用程序中按预期工作。我只是无法让rails在作为gem安装时识别生成器。我发现我的问题与gempec文件有关。特别是spec.file分配。我改变了:
spec.file = `git ls-files -z`.split("\x0")
到
这解决了我的问题。您的gem依赖于rails::Generators::Base并利用rails生成器。它是建在屋顶上的。它是从rails中抽象出来的,因此它将在不依赖rails的情况下为您提供相同的功能。@jasonyost。我知道我的问题是为什么我的gem在安装后没有被应用程序识别。我发现我的gemspec文件中没有正确设置文件路径,我纠正了这个问题,现在它可以正常工作了。我还没有机会发布我的答案。明天早上就可以了。谢谢你的回复和澄清!你确定那是你唯一做的事吗?我花了几个小时试图解决这个问题,但到目前为止没有结果!
require "simpauth/version"
require 'rails'
module Simpauth
class Engine < Rails::Engine
end
end
# coding: utf-8
$:.push File.expand_path('../lib', __FILE__)
require 'simpauth/version'
Gem::Specification.new do |spec|
spec.name = "simpauth"
spec.version = Simpauth::VERSION
spec.authors = ["My Name"]
spec.email = ["my_email@example.com"]
spec.summary = %q{Simplified authentication}
spec.description = %q{}
spec.homepage = ""
spec.license = "MIT"
spec.files = `git ls-files -z`.split("\x0")
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
spec.require_paths = ["lib"]
spec.add_development_dependency "bundler", "~> 1.7"
spec.add_development_dependency "rake", "~> 10.0"
end
spec.file = `git ls-files -z`.split("\x0")
spec.file = Dir["{lib,vendor}/**/*"]