2011-10-17 41 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 
相关问题