开发者

"PGError: no connection to the server" on running specs with Spork

I'm using Ruby 1.9.2, Rails 3.1, Rspec, Postgres and Spork, but I can't get them to play nic开发者_运维问答ely together.

Running the specs for the first time (with Spork running in the background) works fine. However, when I run the specs a second time, it fails with:

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

Any tips appreciated!


You probably also have Devise enabled.

Your problem is described here: https://github.com/sporkrb/spork/wiki/Spork.trap_method-Jujutsu And more specifically for rails 3.1 here: https://gist.github.com/1054078

The beginning of your prefork block in spec_helper.rb and env.rb should looks like:

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

Good luck!


If you're using Factory Girl, don't use the 'factory_girl_rails' gem, just use 'factory_girl'.

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

For anyone using Factory Girl, Machinist, or Shoulda Matchers, make sure you read about Spork's trap_method at: https://github.com/timcharper/spork/wiki/Spork.trap_method-Jujutsu

It solved my problems with Spork and the dropped PostgreSQL connections while testing.


you have to run spork --bootstrap

and after insert some configuration to your spec_helper.rb file, so spork knows about your rails configuration.

As you use RSpec, you can try adding the following code to your spec_helper file:

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


Could you try adding this to Spork.each_run callback and check if it solves the problem?

ActiveRecord::Base.connection_pool.verify_active_connections!


I read the instructions on https://github.com/timcharper/spork/wiki/Spork.trap_method-Jujutsu and found the following.

In my case the solution was to change how machinist blueprints was loaded. My prefork block had this line:

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

I removed that from the prefork block and instead added this line to each_run:

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

The two lines basically does the same thing, so the main thing seams to be not to load the blueprints in the prefork, but rather in each_run.

Hope it helps!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜