mod_passenger, потоки и синглтон-классы - PullRequest
1 голос
/ 17 февраля 2010

У меня вопрос по поводу классов mod_passenger и Singleton (рельсы 2.3.5 и ruby ​​1.9.1).

В моем приложении у меня есть класс Singleton, который реализует пул потоков (потокобезопасный).

Также есть контроллер для управления всеми потоками (убить и запустить их). Этот контроллер использует предыдущий одноэлементный класс для выполнения действий над потоками.

В локальной системе, используя WEBrick с config.cache_classes = true, он работает правильно. В производстве, используя mod_passenger (также config.cache_classes = true), это не работает: потоки не уничтожаются. Однако, если я использую класс singleton из консоли (производственная среда), он работает нормально.

Может ли быть проблема mod_passenger? Любые советы?

Спасибо.

1 Ответ

1 голос
/ 18 февраля 2010

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

Я решил проблему с запуском пула потоков синглтон-класса с помощью скрипта / бегуна и связью его со всеми экземплярами приложений с помощью таблицы базы данных. Я использую эту таблицу для отправки заданий, которые должен выполнять пул потоков.

...