У меня есть сайт запущенного приложения рельсов и Resque рабочих работают в режиме производства, на Ubuntu 9.10, Rails 2.3.4, рубин-е-е 2010,01, PostgreSQL 8.4.2Rails Resque рабочих завершаться PGError: сервер закрыл соединение неожиданно
Рабочие постоянно поднимали ошибки: PGError: сервер неожиданно закрыл соединение.
Мое лучшее предположение заключается в том, что процесс master resque устанавливает соединение с db (например, authlogic делает это при использовании User.acts_as_authentic) при загрузке классов приложений rails и что соединение становится поврежденным в процессе fork() ed (при выходе?) , поэтому следующие раздвоенные дети получают вид сломанной глобальной ActiveRecord :: Base.connection
Я мог бы воспроизвести очень похожее поведение с этим sample code имитируя fork/обработку в рабочем процессе resque. (AFAIK, пользователи libpq рекомендовали воссоздать соединения в разветвленном процессе в любом случае, в противном случае это небезопасно)
Но, что странно, когда я использую pgbouncer или pgpool-II вместо прямого подключения pgsql, такие ошибки не появляются ,
Итак, вопрос в том, где и как я должен копать, чтобы узнать, почему он сломан для простого соединения и работает с пулами подключений? Или разумное обходное решение?
Спасибо, поэтому я просто добавил hook: Resque.after_fork = Proc.new {ActiveRecord :: Base.install_connection} –
У меня может возникнуть аналогичная проблема. Можете ли вы рассказать мне, как и где вы добавили «крючок»? –
нижняя ссылка сломана – botbot