Как мне сбросить соединение Datamapper после того, как Пассажир разветвит рабочий процесс? - PullRequest
4 голосов
/ 14 сентября 2011

После обновления нескольких частей моего приложения на Rails (Ruby 1.9.2, Rails 3.0.4, Datamapper 1.1.0) и перехода на Passenger Standalone мы начали получать странные ошибки подключения MySQL, в том числе:

  • Несоответствие числа полей
  • Потерянное соединение с сервером MySQL во время запроса
  • Сервер MySQL пропал

Потом я вспомнил, что Passenger разветвляет процессы, и вам нужнозаново откройте новые соединения для таких вещей, как redis, memcache и т. д., иначе поток данных будет искажен, и я обнаружил еще один post , рассказывающий о подобных приключениях из-за той же проблемы с MySQL.

Но я также вспомнил, прочитав здесь , что Пассажир позаботился о соединениях с базой данных автоматически.

Итак, у меня есть два вопроса:

1) КакЯ говорю DataMapper, чтобы создать и использовать новое соединение с базой данных?И / или:

2) Разрешает ли разветвление Пассажир автоматически разветвляться на соединения с базой данных или нет?Ради вилки ...;)

1 Ответ

1 голос
/ 23 апреля 2013

Чтобы ответить на вопрос №2, нет, Пассажир сам не обрабатывает закрывающие дескрипторы файлов после разветвления. Вы должны сами управлять этим, если только ваш драгоценный камень не сделает это за вас.

Чтобы ответить # 1, я собрал некоторые вещи, которые нашел. Добавьте в environment.rb и дайте мне знать, работает ли он!

if defined?(PhusionPassenger)
    PhusionPassenger.on_event(:starting_worker_process) do |forked|
        if forked
            # We're in smart spawning mode.
            DataObjects::Pooling.pools.each do |pool|
              pool.dispose
            end
        else
            # We're in direct spawning mode. We don't need to do anything.
        end
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...