怎么使用生成器创建Ruby on Rails 3 gem(包含名称空间)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (9)

我正在尝试使用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

修改(使用'rails生成安装):

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

提问于
用户回答回答于

我知道rspec-rails gem有一个名为“rspec:install”的生成器,它只是一个命名空间,但也许是一个开始。所以在github https://github.com/rspec/rspec-rails上查看它们的源代码树

看起来像文件结构是:

lib
 └ generators
    ├ rspec.rb
    └ rspec
       └ install
          └ install_generator.rb

扫码关注云+社区