«PGError: нет подключения к серверу» при запуске спецификаций с Spork - PullRequest
4 голосов
/ 17 июля 2011

Я использую 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 ]

8 голосов
/ 01 августа 2011

Возможно, вы также включили Devise.

Ваша проблема описана здесь: https://github.com/sporkrb/spork/wiki/Spork.trap_method-Jujutsu А более конкретно для рельсов 3.1 здесь: https://gist.github.com/1054078

Начало вашего блока prefork в spec_helper.rb и env.rb должен выглядеть так:

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

Удачи!

3 голосов
/ 10 августа 2011

Если вы используете 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 или Matha Matchers, убедитесь, чтоВы читали о trap_method в Spork по адресу: https://github.com/timcharper/spork/wiki/Spork.trap_method-Jujutsu

Это решило мои проблемы с Spork и оборванными соединениями PostgreSQL во время тестирования.

0 голосов
/ 09 августа 2011

Я прочитал инструкцию на 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.

Надеюсь, это поможет!

0 голосов
/ 20 июля 2011

Не могли бы вы попробовать добавить это к Spork.each_run обратному вызову и проверить, решает ли это проблему?

ActiveRecord::Base.connection_pool.verify_active_connections!
0 голосов
/ 17 июля 2011

вам нужно запустить spork --bootstrap

и после вставки некоторой конфигурации в ваш файл spec_helper.rb, чтобы spork знал о вашей конфигурации rails.добавив следующий код в ваш файл 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
...