На Heroku, Cedar, с Unicorn: Получение ActiveRecord:: StatementInvalid: PGError: ошибка SSL SYSCALL: обнаружен EOF

Поддержка Heroku говорит, что это связано с их версией libssl в общих базах данных, но мы столкнулись с ней в проекте и в отдельной базе данных.

В основном эта ошибка происходит так часто (ближе к сразу после развертывания) в каждом проекте, который мы переместили в новый стек Cedar с Unicorn, настроенным на 3 рабочих:

Сообщение об ошибке:

ActiveRecord::StatementInvalid: PGError: SSL SYSCALL error: EOF detected : SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.at

Where:
some_controller#index
[PROJECT_ROOT]/vendor/bundle/ruby/1.9.1/gems/activerecord-3.0.11/lib/active_record/connection_adapters/postgresql_adapter.rb, line 505

Нет ответов от heroku, кроме того, может быть, ждать, кто знает, как долго нам обновлять наши общие серверы баз данных *, и я ничего не нашел в google.

Они также предположили, что это связано с перекрытием рабочих-единорогов и что мы должны переключиться на Тонкий, но прирост производительности - это достойная случайная ошибка (я думаю!). Я надеюсь, что есть способ настроить Unicorn для предотвращения перекрытия.

Кто-нибудь столкнулся с этим, и если да, то что вы сделали для его решения? Спасибо!

* не их фактические слова, как я чувствовал после их ответа.

Ответ 1

Поддержка Heroku предложила добавить это в конфигурацию Unicorn:

Добавить в config/unicorn.rb:

after_fork do |server, worker|
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.establish_connection 
  end
end

Я добавил его, и мы не видели ни одной ошибки PGError: SSL SYSCALL весь день.