2014-11-05 5 views
0

나는이 문제에 대한 답을 켜고 끄기 위해 노력했지만, 비슷한 게시물을 읽는 것은 아직 내 문제를 해결하지 못했습니다. rspec 및 spork를 사용하는 레일 응용 프로그램이 있습니다. spork없이 rspec을 실행하면 테스트는 정상적으로 실행되지만 속도는 매우 느립니다. 여기Spork를 실행할 때 PG에 연결하지 않음

ActiveRecord::StatementInvalid: 
    PG::ConnectionBad: connection is closed:    SELECT a.attname, format_type(a.atttypid, a.atttypmod), 
         pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod 
        FROM pg_attribute a LEFT JOIN pg_attrdef d 
        ON a.attrelid = d.adrelid AND a.attnum = d.adnum 
        WHERE a.attrelid = '"orders"'::regclass 
        AND a.attnum > 0 AND NOT a.attisdropped 
        ORDER BY a.attnum 

입니다 (대부분의) 내 gemfile의 : 나는 spork를 사용하는 경우, 그러나, 나는 다음과 같은 오류가 발생합니다

gem 'rails', '4.1.5' 
gem 'bootstrap-sass', '2.3.2.0' 
gem 'sprockets' 
gem 'minitest' 
gem 'bcrypt-ruby' 
gem 'faker', '1.1.2' 
gem 'will_paginate', '3.0.4' 
gem 'bootstrap-will_paginate', '0.0.9' 
gem 'pg' 
gem 'cocoon' 

group :development, :test do 
    gem 'rspec-rails' 
    gem 'guard-rspec' 
    gem 'spork-rails' 
    gem 'guard-spork' 
    gem 'childprocess' 
    gem 'database_cleaner' 
end 

group :test do 
    gem 'selenium-webdriver' 
    gem 'capybara' 
    gem 'factory_girl_rails' 
end 

... 그리고 내 database.yml을 (DEV 및 테스트) :

development: 
    adapter: postgresql 
    host: localhost 
    username: user 
    password: 'password' 
    database: test_app_development 

test: 
    adapter: postgresql 
    host: localhost 
    username: user 
    password: 'password' 
    database: test_app_test 

참고 : 다른 많은 유사한 게시물, 사람들은 단지 테스트를 실행하는 두 번째 이후의 시간에 유사한 오류가 발생했지만, 내 경우, 오류가 처음 실행 및 다른 모든 온다. 레일을 사용하여 dev 모드에서 PG에 연결하는 데 문제가 없습니다.

편집 나는 문제 (아마도 생각을 해결하기 위해 내 번들을 업그레이드하려고 그것을이었던 RSpec에, 가드 또는 spork 최신 버전의 해결 문제,하지만 아무 소용. 그러나 나는에 필요한 사항을 변경 않았다 spork.rb는 https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0#changes-in-guardguard에 나와 여기에 제안 또한 rspec.rb 업데이트 : 보석 업데이트와 관련된 문제를 해결 https://github.com/manafire/spork/commit/38c79dcedb246daacbadb9f18d09f50cc837de51#diff-937afaa19ccfee172d722a05112a7c6fL6을하지만, 내 원래의 문제가 해결되지 않은

편집은 여기 SPEC_HELPER 을 포함. 내 spec_helper.rb 파일 :

require 'rubygems' 
require 'spork' 

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

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

    ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration) 

    RSpec.configure do |config| 

    config.use_transactional_fixtures = false 

    config.before(:suite) do 
     DatabaseCleaner.strategy = :truncation 
    end 

    config.before(:each) do 
     DatabaseCleaner.start 
    end 

    config.after(:each) do 
     DatabaseCleaner.clean 
    end 

    config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    config.infer_base_class_for_anonymous_controllers = false 

    config.order = "random" 
    config.include Capybara::DSL 
    end 
end 

Spork.each_run do 
end 
+0

(당신이 RSpec에 3을 사용하는 경우)'spec_helper' 또는'rails_helper'을 무엇 파일이 포함되어 있습니까? 데이터베이스 클리너가 발생할 수 있습니다 – max

+0

spec_helper.rb를 포함하도록 내 게시물을 편집했습니다. 정직하게 DatabaseCleaner가 어떻게 작동하는지 잘 모르겠습니다. 그게 문제의 원인 인 것처럼 보입니까? –

답변

1

이 문제지만 훨씬 빨리되는 대신 자르는 트랜잭션을 사용하여 해결할 수 없음을 완전히하십시오 :

config.before(:each) do 
    # Use really fast transaction strategy for all 
    # examples except `js: true` capybara specs 
    DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction 
    DatabaseCleaner.start 
end 
+0

이 문제는 해결할 수 없었지만 문제를 해결하지 못했습니다. 오류/오류 : 백 트레이스에서 일치하는 줄을 찾을 수 없습니다. ActiveRecord :: StatementInvalid : PG :: ConnectionBad : 연결이 닫혀 있습니다. BEGIN –

+0

그러나 이것을 수행하면 spork를 기하 급수적으로 사용하지 않고 테스트 속도를 향상시킬 수 있습니다. 즉, 한 모델 사양에서 평균 25 초에서 불과 0.5 초에 이르는 것과 같습니다. 고마워! 당분간, 그것은 나의 원래 문제를 훨씬 덜 짜증나게 만듭니다. –

+0

이 질문은 http://stackoverflow.com/questions/19828385/pgconnectionbad-could-not-connect-to-server-connection-refused를 보았습니까? – max