【问题标题】:Creating a Ruby on Rails 3 gem with a generator (incl. namespace)使用生成器(包括命名空间)创建 Ruby on Rails 3 gem
【发布时间】:2010-06-22 09:37:48
【问题描述】:

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

但没有任何帮助。我在网上也找到了不少,但没有显示出我需要的东西。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      看起来文件结构是:

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

      我希望这可以帮助您找到解决方案!让我们知道您的发现

      【讨论】:

      • 这很完美!无需像 David Sulc 的回答那样嵌套在另一个 rails 文件夹中。
      【解决方案3】:

      命名空间生成器的目录应该是: lib/generators/my_gem

      这是假设您的 gem 的名称是“my-gem”或“my_gem”。这也可能适用于非字母数字的其他字符。如果有连字符,它将被替换为下划线。

      我花了大约 4 个小时才弄明白。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-07
        • 1970-01-01
        • 2011-05-05
        • 1970-01-01
        • 1970-01-01
        • 2013-03-28
        • 2012-12-27
        • 1970-01-01
        相关资源
        最近更新 更多