我正在尝试用rails 3(beta 4)的生成器创建gem。我跟着these instructions,但我没能让它运行。问题是,当我在生成器文件中定义模块时,生成器会以“rails generate”列出,但无法执行,因为找不到生成器。
根据说明(不适用于“rails generate my_gem:install”):
module MyGem
class InstallGenerator < Rails::Generators::Base
source_root File.expand_path("../templates", __FILE__)
# all public methods in here will be run in order
def add_my_initializer
template "initializer.rb", "config/initializers/my_gem_initializer.rb"
end
end
end
已修改(与“rails generate install”一起使用):
class InstallGenerator < Rails::Generators::Base
source_root File.expand_path("../templates", __FILE__)
# all public methods in here will be run in order
def add_my_initializer
template "initializer.rb", "config/initializers/my_gem_initializer.rb"
end
end
但是,我希望有生成器的名称空间,例如company:gem_name:generator,为此我必须使用模块方法(我认为)。我的猜测是,这与查找和目录结构有关,但我不知道怎么做。我尝试了几种方法:
lib
-generators
--my_gem.rb
lib
-generators
--company
---my_gem.rb
lib
-generators
--company
---my_gem_name
----my_gem.rb
但没什么帮助。我也在网上找到了不少,但没有显示出我需要什么。
最佳答案
(我意识到这篇文章已经有将近一年的历史了,但希望这篇文章至少对那些从搜索中来到这里的人有帮助。)
我为sugarcrm ruby gem实现了一个命名的生成器,并在这里写了一篇关于这个特定问题的博客:http://davidsulc.com/blog/2011/05/22/adding-a-namespaced-rails-generator-to-a-standalone-ruby-gem/
或者,您可以在这里查看gem的代码:https://github.com/chicks/sugarcrm/commit/183c1b193e6620431826c3b594c568d4592fb0af