2011-07-17 5 views
4

Ruby 1.9.2, Rails 3.1, Rspec, Postgres 및 Spork를 사용하고 있습니다. 함께 재생할 수 없습니다."PGError : Spork에서 실행중인 사양에 대한 서버와의 연결이 없습니다"

처음으로 사양을 실행하면 (백그라운드에서 실행되는 Spork로 작동) 정상적으로 작동합니다. 그러나 두 번째 사양을 실행하면 다음과 같이 실패합니다.

Failure/Error: Unable to find matching line from backtrace 
PGError: 
    no connection to the server 
# /Users/tom/.rvm/gems/[email protected]/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/postgresql_adapter.rb:272:in `exec' 
etc.... 

감사합니다. spork이 레일 구성에 대해 알 수 있도록

답변

8

아마도 Devise를 사용하도록 설정했을 수도 있습니다. 여기에 레일 3.1 더 구체적으로 https://github.com/sporkrb/spork/wiki/Spork.trap_method-Jujutsu 을 그리고 :

의 문제가이 설명에 https://gist.github.com/1054078

당신의 prefork의 블록의 시작을 spec_helper.rbenv.rb해야 보이는 같은 :

Spork.prefork do 
    Spork.trap_method(Rails::Application, :reload_routes!) 
    Spork.trap_method(Rails::Application::RoutesReloader, :reload!) 
... 

행운을 빕니다 !

+0

이 문제가 해결되었습니다! 대단히 감사합니다. –

+0

이것은 나에게도 고쳐주었습니다. 덕분에 – tomblomfield

+1

Worked가되었지만, FactoryGirl mod (아래)도해야했습니다. – Karl

0

당신은, 당신의 spec_helper.rb 파일에 spork --bootstrap

및 삽입 한 후 일부 구성을 실행해야합니다.

당신이 RSpec에를 사용할 때, 당신은 당신의 spec_helper 파일에 다음 코드를 추가 시도 할 수 있습니다 :

require 'rubygems' 
require 'spork' 

Spork.prefork do 
    ENV["RAILS_ENV"] ||= 'test' 
    require File.expand_path("../../config/environment", __FILE__) 
    require 'rspec/rails' 

    Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

    RSpec.configure do |config| 
    config.mock_with :rspec 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 
    config.use_transactional_fixtures = true 

    # Needed for Spork 
    ActiveSupport::Dependencies.clear 
    end 
end 

Spork.each_run do 
    load "#{Rails.root}/config/routes.rb" 
    Dir["#{Rails.root}/app/**/*.rb"].each { |f| load f } 
end 
+0

나는 OP와 똑같은 문제를 겪고 있습니다. spec_helper가 올바르게 부트 스트랩되었습니다. –

+0

내 spec_helper는 매우 비슷해 보이지만 여전히 기쁨은 없습니다. – tomblomfield

+0

레일 3.1 문제일까요? 나는 아직도 켜져있다 3.0.9 – tmaximini

0

당신이 Spork.each_run 콜백이 추가 시도 할 수 문제가 해결되는지 확인?

ActiveRecord::Base.connection_pool.verify_active_connections! 
+0

그 예외를 throw합니다. 예외가 발생했습니다 : # tomblomfield

0

나는 https://github.com/timcharper/spork/wiki/Spork.trap_method-Jujutsu의 지침을 읽고 다음을 찾았습니다.

필자의 경우 해결책은 기계 공학자 청사진을로드하는 방법을 변경하는 것이 었습니다. 내가 prefork의 블록에서 대신이 each_run이 라인을 추가 한 제거

Spork.prefork do 
    ... 
    require Rails.root.join 'spec/support/blueprints' 
    ... 

:

Spork.each_run do 
    Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 
    ... 

두 라인 기본적으로 같은 일을하기 때문에 중요한 것은 솔기 내 prefork의 블록이 줄을했다 prefork에서 청사진을 적재하지 말고, 대신 each_run에서 적재하십시오.

희망이 있습니다.

3

공장 소녀를 사용하는 경우 'factory_girl_rails'보석을 사용하지 말고 'factory_girl'만 사용하십시오.

https://github.com/timcharper/spork/wiki/Spork.trap_method-Jujutsu 그것은 Spork 내 문제를 해결하고 떨어 PostgreSQL의 연결을 테스트하는 동안 : 공장 소녀, 기계공, 또는 했어야 매처 (Matchers)를 사용하는 사람들을위한

Spork.each_run do 
    FactoryGirl.definition_file_paths = [ 
    File.join(Rails.root, 'spec', 'factories') 
    ] 
    FactoryGirl.find_definitions 
end 

, 당신은에 Spork의 trap_method에 대해 읽어해야합니다.

+0

나는 또한 FactoryGirl을 Cucumber와 함께 사용하고 있으며, 바닐라 'factory_girl'을 'factory_girl_rails'로 바꾸면 내 기능이 손상됩니다. 당신이 가지고있는 것을'features/support/factory_girl.rb' 파일에 추가함으로써 작동하게했습니다. – chadoh