Rails 4.0 PG::UnableToSend сокет не открыт

В настоящее время я пытаюсь обновить приложение Rails 3.2 до Rails 4.0.13 (ruby 2.3.5, PostgreSQL 9.4.13) и получаю эту ошибку при запуске интеграционных тестов;

      :  PG::UnableToSend at /companies/get_current_firm
      : ===============================================
      : 
      : > socket not open
      : 
      : 
      : activerecord (4.0.13) lib/active_record/connection_adapters/postgresql_adapter.rb, line 798
      : -------------------------------------------------------------------------------------------
      : 
      : ``` ruby
      :   793           end
      :   794   
      :   795           FEATURE_NOT_SUPPORTED = "0A000" #:nodoc:
      :   796   
      :   797           def exec_no_cache(sql, binds)
      : > 798             @connection.async_exec(sql, [])
      :   799           end
      :   800   
      :   801           def exec_cache(sql, binds)
      :   802             stmt_key = prepare_statement sql
      :   803   
      : ```

Этот интеграционный тест регистрируется, а затем поступает ряд вызовов из внешнего интерфейса (AngularJS), чтобы получить подробности, такие как текущая выбранная фирма и т. Д. Каждый из этих вызовов получает одно и то же сообщение, как будто соединение было отключено. Я использую браузер Chrome через селен и капибару в режиме LIVE, чтобы я мог видеть, что происходит.

Вот мой файл database.yml для теста

test: &test
  adapter: postgresql
  encoding: unicode
  database: test_<%= ENV['USER'] %><%= ENV['TEST_ENV_NUMBER'] %>
  pool: 5
  username: <%= ENV['DATABASE_USER'] %>
  password: <%= ENV['DATABASE_PASSWORD'] %>

Вот звонок, который он делает с внешнего интерфейса

AngularJS

  current_firm: (scope) ->
    $http({method: 'GET', url: '/companies/get_current_firm'}).success (data) ->
      scope.current_firm = data['firm']

Rails Controller

  def get_current_firm
    render json: {firm: current_firm.organisation}
  end

Существует три отдельных вызова для получения разных данных, когда пользователь входит в систему, иногда в тестах он получает 1 или 2 из них, но не три.

Я попытался обойти это с http://www.ruby-railings.com/en/rails/postgresql/2014/01/11/connection-problems-in-rails-4.html. Это не решило проблему вообще.

Обновить

Когда пользователь входит в систему, из AngularJS в серверную часть Rails срабатывают три http-вызова. Если я выделю два вызова, то этот вызов будет работать каждый раз. Если я укажу только один, поэтому у нас два вызова, то он не будет выполнен ни один, ни оба вызова. Я получаю сообщение "в ожидании" на одном из вызовов.

1 ответ

Я работал, что это проблема AngularJS, отправляющая слишком много запросов в Rails 4 одновременно. Чтобы решить проблему, я помещаю каждый звонок в обещание.

Другие вопросы по тегам