ruby - 使用生成器(包括 namespace )创建 Ruby on Rails 3 gem

标签 ruby rubygems ruby-on-rails-plugins ruby-on-rails-3

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

但没有任何帮助。我也在 Internet 上找到了很多,但没有找到我需要的东西。

最佳答案

(我意识到这篇文章已有将近一年的历史,但希望这至少对通过搜索来到这里的人有所帮助。)

我为(独立的)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

关于ruby - 使用生成器(包括 namespace )创建 Ruby on Rails 3 gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3091909/

相关文章:

ruby - 你能传递一个返回错误的代码块给一个方法吗?

ruby - 为什么我得到 undefined method `+' for nil :NilClass (NoMethodError)

ruby - 记录器 gem 的 1.2.8 版发生了什么?

ruby - 从 IRB 中的本地 Gem 加载文件

ruby-on-rails - 使用 ruby​​ on rails 中的回形针图像为模型播种

ruby-on-rails - 使用 Fog 和 Amazon S3 的公共(public) URL

ruby - capybara 无法通过 id 找到元素

ruby - 不同环境的 Gemfile 依赖

mysql - Rails/mysql SUM 不同记录 - 优化

ruby - gem 规范失败