2010-06-22 49 views
17

我正在嘗試使用Rails 3(測試版4)的生成器創建一個gem。我跟着these instructions,但我無法運行。問題是,當我在生成器文件中定義模塊時,生成器會使用'rails generate'列出,但無法執行,因爲找不到生成器。使用生成器創建Ruby on Rails 3 gem(包含命名空間)

從指令(不':安裝導軌產生my_gem的工作):

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 

修改(與「軌道產生安裝工程):

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:發電機,我必須使用模塊方法(我認爲)。我的猜測是它與查找和目錄結構有關,但我無法弄清楚。我試了幾種方法:

lib 
-generators 
--my_gem.rb 

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

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

但沒有什麼幫助。我在互聯網上也發現了很多,但如果顯示我需要的話,則不會。

回答

13

什麼(我知道這個職位是將近一歲,但希望這將至少是有幫助的人來到這裏,從搜索。)

我實現了一個命名空間生成的(獨立)SugarCRM的紅寶石寶石和寫了一篇博客文章中針對此特定問題在這裏:http://davidsulc.com/blog/2011/05/22/adding-a-namespaced-rails-generator-to-a-standalone-ruby-gem/

或者,你可以看看寶石的代碼在這裏:https://github.com/chicks/sugarcrm/commit/183c1b193e6620431826c3b594c568d4592fb0af

4

我知道rspec-rails gem有一個名爲「rspec:install」的生成器,它只是一個命名空間,但也許它是一個開始。因此,請檢查自己的源代碼樹在github https://github.com/rspec/rspec-rails

貌似文件結構是:

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

我希望這有助於引導你到一個解決方案!讓我們知道你找

+0

這個作品完美!不需要像David Sulc的回答那樣在另一個'rails'文件夾中嵌套。 – 2012-01-29 11:59:49

0

目錄爲您的命名空間發電機應該是: LIB /發電機/ my_gem

這是假設你的寶石名稱是'my-gem'或'my_gem'。這可能適用於非字母數字的其他字符。如果有連字符,它將被替換爲下劃線。

這花了我4個小時才弄清楚。