2011-10-17 37 views
3

我們更新了工廠女孩後,我的腳手架發電機停止工作。這是爲什麼發生。首先,我的配置文件,試圖爲某些默認腳手架一代,像這樣:Rails 3.1:我如何添加一個在gem初始值設定項後運行的初始化程序?

class Application < Rails::Application 
    config.app_generators do |g| 
    g.template_engine  'mizugumo:haml' 
    g.scaffold_controller 'mizugumo:scaffold_controller' 
    g.assets    'mizugumo:js_assets' 
    g.test_framework  :lrdspec, :fixture => true 
    g.fixture_replacement 'lrdspec:factory' 

    g.fallbacks['mizugumo:haml'] = :haml 
    g.fallbacks[:lrdspec] = :rspec 
    end 
    ... 
end 

其中:lrdspec是我公司的腳手架規格發電機的名稱。然而,最近的factory_girl_rails在其初始化,粗暴力量config.generators.test_framework爲「test_unit」除非你的測試框架是完全「:rspec的」:

module FactoryGirl 
    class Railtie < Rails::Railtie 

    initializer "factory_girl.set_fixture_replacement" do 
    generators = config.respond_to?(:app_generators) ? config.app_generators : config.generators 

    if generators.options[:rails][:test_framework] == :rspec 
     generators.fixture_replacement :factory_girl, :dir => 'spec/factories' 
    else 
     generators.test_framework :test_unit, :fixture => false, :fixture_replacement => :factory_girl 
    end 
    end 

我試圖找出如何要做的是在FG的初始化器後面生成我自己的初始化器,將test_framework設置回:lrdspec,就像我想要的那樣。

我試過把我自己的railtie放到config/initializers中,或者在config/application.rb中添加一個塊到config.after_initialize,以及其他一些方法,但還沒有找到解決方案。 (我對Rails'初始化序列的瞭解需要比'我認爲的更深一些')。

謝謝!

+0

你看http://guides.rubyonrails.org/initialization。 html(或Rails 2的http://railsguts.com/initialization.html)? – coreyward

+0

是的..(和railties-3.1.1/lib/rails/initializable.rb的代碼是我過去幾個小時一直在閱讀的內容,它們很有幫助,但我看不到看看如何影響創建的初始化器的* order * – IdahoEv

+0

初始化器(例如config/initializers/foobar.rb)是按照「按字母順序排列」的順序加載的,應該很容易找到執行實際的文件grepping,不是? – coreyward

回答

3

好的 - 找到了解決方案。有時只是發佈一個問題可以幫助思考。

答案是在gem中設置我自己的初始化程序,該初始化程序包含我的腳手架生成器,並在創建該塊時傳遞:>「factory_girl.set_fixture_replacement」以初始化()。您可以指定:在初始化程序之後沒有記錄在Rails docco中,但可以通過發現Initializable使用TSort對其初始化程序集進行排序,研究TSort如何工作以及發現已存儲的:after/:在TSort回調的方法中使用參數之前。

所以修復是在配置Railtie放棄這個爲我自己的寶石,提供腳手架發電機的一個:

initializer "lrd_dev_tools.set_generators", :after => 'factory_girl.set_fixture_replacement' do 
    generators = config.respond_to?(:app_generators) ? config.app_generators : config.generators 
    generators.test_framework :lrdspec, :fixture => true 
    generators.fixture_replacement 'lrdspec:factory'  
end 
相關問題