2012-11-29 102 views
4

的安裝發電機我很新建立的Ruby寶石和我在我的第一個採取刺傷。我正在爲我的寶石編寫一個生成器,它將在我的Rails應用程序中生成一個遷移。我期待在Rails應用程序中包含gem,運行「rails g mygem:install」讓它創建遷移,然後運行「rake db:migrate」來完成所有事情。創建一個Ruby寶石

我發現了幾個不同的方式來完成類似的任務,但迄今沒有奏效。我似乎無法讓Rails應用程序找到生成器。我試過的最新指南位於:http://www.railsdispatch.com/posts/how-rails-3-enables-more-choices-part-1

這是我目前創業板的結構是什麼樣子:

-lib/ 
    -generators/ 
    -templates/ 
     -some_migration.rb 
    -install_generator.rb 
    -gemname/ 
    -rails/ 
     -railtie.rb 
     -engine.rb 
     -tasks/ 
     -gemname.rake 
    -gemname.rb 
-spec/ 
-gemname.gemspec 

這裏是我的install_generator.rb文件看起來是這樣的:

require 'rails' 

module Gemname 
    class InstallGenerator < ::Rails::Generators::Base 
    include Rails::Generators::Migration 
    source_root File.expand_path('../templates', __FILE__) 

    desc "add the migrations" 
    def self.next_migration_number(path) 
     unless @prev_migration_nr 
     @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i 
     else 
     @prev_migration_nr += 1 
     end 
    @prev_migration_nr.to_s 
    end 

    def copy_migrations 
    migration_template "some_migration.rb", "db/migrate/some_migration.rb" 
    end 
    end 
end 

我不知道是否有什麼我失蹤。我正在測試一個Rails 3.2應用程序,該應用程序的Gemfile中列出了我的gem並安裝了gem。寶石文件夾結構有什麼問題可能會阻止我的發生器顯示出來嗎?我需要在某個地方需要什麼嗎?

任何幫助表示讚賞。

回答

1

好了,我不知道它的我做固定我的問題,但這裏的變化是我做過什麼:

改變了我的生成器的名稱,以gemname_generator.rb和我產生的目錄結構這樣:

- lib/ 
    -generators/ 
    -templates/ 
    -gemname_generator.rb 

該行添加到我的發電機:

namespace 'gemname' 

我現在可以在Rails應用程序中運行「rails g gemname」,並讓它調用我的生成器。