Как вы развертываете сценарий PSGI в Apache без перезапуска? - PullRequest
3 голосов
/ 25 мая 2011

Я хочу развернуть сценарии PSGI, которые работают в Apache2 с Plack.Apache настроен на:

<Location "/mypath">
  SetHandler perl-script
  PerlResponseHandler Plack::Handler::Apache2
  PerlSetVar psgi_app  /path/to/my/script.psgi
</Location>

Когда я тестирую скрипт с помощью plackup, параметр --reload просматривает обновления файла .psgi.В рабочей среде хорошо, что Apache и Plack не проверяют и не перезапускают каждое изменение по соображениям производительности, но как я могу им явно указать перезапуск Plack::Handler::Apache2 и / или сценария PSGI для развертывания новой версии?

Похоже, Plack регулярно проверяет некоторые изменения, но я понятия не имею, когда.Более того, кажется, что создается несколько экземпляров, поэтому я иногда получаю разные версии script.psgi, когда на /mypath.Было бы полезно вручную сбросить обработчик ответов Perl без перезапуска Apache или ожидания неизвестного количества времени.

Ответы [ 3 ]

6 голосов
/ 26 мая 2011

Короткий ответ: ты не можешь. Вот почему мы рекомендуем вам использовать plackup (с -r) для быстрой разработки и использовать Apache только для развертывания (производственного использования).

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

1 голос
/ 08 мая 2012

Вы можете вывести свое приложение из процесса appache, например,

FastCgiExternalServer /virtual/filename/fcgi -socket /path/to/my/socket

и запустить программу с помощью

plackup -s FCGI --listen /path/to/my/socket --nproc 10 /path/to/my/script.psgi

Таким образом, вы можете перезапустить ваше приложение без перезапуска apache.

если вы сохраните pid основного процесса fcgi (--pid $ pid_file), вы можете легко перезапустить загрузку нового кода.

Также имеется модуль, которым можно управлять (запускать, останавливать), перезагрузите) все ваши пулы fcgi: https://metacpan.org/pod/FCGI::Engine::Manager::Server::Plackup (не проверено)

1 голос
/ 25 мая 2011

Apache2 :: Перезагрузка (не проверено)

...