"PGError: нет подключения к серверу" при запуске спецификаций с Spork
Я использую Ruby 1.9.2, Rails 3.1, Rspec, Postgres и Spork, но я не могу заставить их играть вместе.
Запуск спецификаций в первый раз (с Spork в фоновом режиме) работает нормально. Тем не менее, когда я запускаю спецификации во второй раз, он терпит неудачу с:
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....
Любые советы приветствуются!
5 ответов
Возможно, вы также включили Devise.
Ваша проблема описана здесь: https://github.com/sporkrb/spork/wiki/Spork.trap_method-Jujutsu а более конкретно для рельсов 3.1 здесь: https://gist.github.com/1054078
Начало вашего префоркового блока в spec_helper.rb
а также env.rb
должно выглядеть так:
Spork.prefork do
Spork.trap_method(Rails::Application, :reload_routes!)
Spork.trap_method(Rails::Application::RoutesReloader, :reload!)
...
Удачи!
Если вы используете Factory Girl, не используйте гем 'factory_girl_rails', просто используйте 'factory_girl'.
Spork.each_run do
FactoryGirl.definition_file_paths = [
File.join(Rails.root, 'spec', 'factories')
]
FactoryGirl.find_definitions
end
Для тех, кто использует Factory Girl, Machinist или Shoulda Matchers, обязательно прочитайте о trap_method в Spork по адресу: https://github.com/timcharper/spork/wiki/Spork.trap_method-Jujutsu
Это решило мои проблемы со Spork и потерянными соединениями PostgreSQL во время тестирования.
Ты должен бежать spork --bootstrap
и после вставки некоторой конфигурации в ваш файл spec_helper.rb, чтобы spork знал о вашей конфигурации rails.
При использовании 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
Не могли бы вы попробовать добавить это к Spork.each_run
перезвонить и проверить, решает ли это проблему?
ActiveRecord::Base.connection_pool.verify_active_connections!
Я прочитал инструкции на https://github.com/timcharper/spork/wiki/Spork.trap_method-Jujutsu и обнаружил следующее.
В моем случае решением было изменить способ загрузки чертежей машиниста. Мой блок prefork имел следующую строку:
Spork.prefork do
...
require Rails.root.join 'spec/support/blueprints'
...
Я удалил это из блока prefork и вместо этого добавил эту строку в each_run:
Spork.each_run do
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
...
Эти две строки в основном делают одно и то же, поэтому главное - не загружать чертежи в prefork, а в each_run.
Надеюсь, поможет!