使用生成器创建Ruby on Rails 3 gem(包括命名空间)

hju*_*ycz 17 ruby rubygems ruby-on-rails-plugins ruby-on-rails-3

我正在尝试使用Rails 3(beta 4)的生成器创建一个gem.我按照这些说明操作,但我无法运行.问题是,当我在生成器文件中定义模块时,生成器会列出'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
Run Code Online (Sandbox Code Playgroud)

修改(使用'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
Run Code Online (Sandbox Code Playgroud)

但是,我想为生成器设置名称空间,例如company:gem_name:generator,我必须使用模块方法(我认为).我的猜测是它与查找和目录结构有关,但我无法弄清楚如何.我尝试了几种方法:

lib
-generators
--my_gem.rb

lib
-generators
--company
---my_gem.rb

lib
-generators
--company
---my_gem_name
----my_gem.rb
Run Code Online (Sandbox Code Playgroud)

但没有任何帮助.我在互联网上也发现了很多,但是如果我展示了我需要的东西,那就是非.

Dav*_*ulc 13

(我意识到这篇文章已有近一年的历史了,但希望这对于从搜索到这里的人来说至少会有所帮助.)

我为(独立的)SugarCRM Ruby gem实现了一个名称空间生成器,并在这里写了一篇关于这个特定问题的博客文章:http://davidsulc.com/blog/2011/05/22/adding-a-namespaced-rails-generator-到-A-独立-红宝石宝石/

或者,您可以在这里查看gem的代码:https://github.com/chicks/sugarcrm/commit/183c1b193e6620431826c3b594c568d4592fb0af