我正在尝试使用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
但是,我想要为生成器设置命名空间,例如公司:gem_name:generator,我必须使用模块方法(我认为)。我的猜测是它与查找和目录结构有关,但我无法弄清楚如何。我尝试了几种方法:
lib
-generators
--my_gem.rb
lib
-generators
--company
---my_gem.rb
lib
-generators
--company
---my_gem_name
----my_gem.rb
但没有任何帮助。我在互联网上也发现了很多,但是如果能显示出我需要的东西,我就会发现它。
答案 0 :(得分:13)
(我意识到这篇文章已有近一年的历史了,但希望这对于从搜索来到这里的人来说至少会有所帮助。)
我为(独立的)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
答案 1 :(得分:4)
我知道rspec-rails gem有一个名为“rspec:install”的生成器,它只是一个命名空间,但也许它是一个开始。所以在github https://github.com/rspec/rspec-rails
上查看他们的源代码树看起来文件结构是:
lib
└ generators
├ rspec.rb
└ rspec
└ install
└ install_generator.rb
我希望这有助于您找到解决方案!让我们知道您的发现
答案 2 :(得分:0)
命名空间生成器的目录应该是: LIB /发电机/ my_gem
这假设您的宝石的名称是'my-gem'或'my_gem'。这可能也适用于非字母数字的其他字符。如果有连字符,它将被替换为下划线。
这花了我大约4个小时才弄清楚。