2011-10-17 3 views
3

공장 소녀를 업데이트 한 후 내 발판 생성기가 작동을 멈췄습니다. 이유가 여기에 있습니다. 첫째, 내 설정 파일과 같이, 비계 생성을 위해 특정 기본값을 설정하려고 :레일 3.1 : 어떻게 보석 이니셜 라이저를 실행하는 이니셜 라이저를 추가합니까?

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, 그것의 초기화에서, 무례 'test_unit'에 config.generators.test_framework 테스트 프레임 워크를 정확히하지 않는 한 "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으로 설정하는 것입니다.

config/initializer에 내 레일 티를 떨어 뜨리거나 config/application.rb의 config.after_initialize에 블록을 추가하고 다른 방법을 시도했지만 해결책을 찾지 못했습니다. (Rails의 초기화 시퀀스에 대한 지식은 생각보다 조금 더 깊어 야합니다.)

감사합니다.

+0

당신이 http://guides.rubyonrails.org/initialization 봤어 :

그래서 수정은, 내 자신의 보석에 대한 구성 Railtie의 발판 발전기를 제공하는 일을이 드롭하는 것이 었습니다. html (또는 레일 2 용 http://railsguts.com/initialization.html)? – coreyward

+0

예 .. (railties-3.1.1/lib/rails/initializable.rb의 코드는 제가 지난 몇 시간 동안 읽고 있던 것들입니다. 도움이 되긴하지만 어느 소스에서) 생성 된 이니셜 라이저의 * 순서 *에 영향을 미치는 방법을 참조하십시오. – IdahoEv

+0

초기화 프로그램 (예 : config/initializers/foobar.rb)은 "사전 순"순서로로드됩니다. 파일에 대한 실제 그립, 안돼? – coreyward

답변

3

오케이 - 해결책을 찾았습니다. 때로는 질문을 게시하는 것이 그것을 통해 생각하는 데 도움이 될 수 있습니다.

대답은 내 발판 생성기를 보유하고있는 보석에 내 자신의 초기화 프로그램을 설정하고 패스하는 것입니다. 해당 블록을 만들 때 => "factory_girl.set_fixture_replacement"를 초기화()합니다. 당신이 지정할 수있는 사실은 초기화 파일에 대한 문서화가 Rails docco에 문서화되어 있지 않지만, Initializable이 TSort를 사용하여 이니셜 라이저 콜렉션을 정렬하고, TSort의 작동 방식을 연구하고, 저장된 : after/: TSort가 다시 호출하는 메서드에서 매개 변수를 사용하기 전에.

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 
관련 문제