[英]How do you deploy a PSGI script in Apache without restarting?
我想用 Plack 部署一個在 Apache2 中運行的 PSGI 腳本。 Apache 配置有:
<Location "/mypath">
SetHandler perl-script
PerlResponseHandler Plack::Handler::Apache2
PerlSetVar psgi_app /path/to/my/script.psgi
</Location>
當我使用 plackup 測試腳本時,--reload 參數會.psgi
--reload
上的更新。 在生產環境中,出於性能原因,Apache 和 Plack 不會檢查並重新啟動每次更改,但我如何明確告訴他們重新啟動Plack::Handler::Apache2
和/或 PSGI 腳本以部署新版本?
看起來 Plack 會定期檢查一些變化,但我不知道什么時候。 此外,它似乎創建了多個實例,所以有時我在/mypath
時會得到不同版本的script.psgi
。 手動刷新 perl 響應處理程序會很有幫助,而無需重新啟動 Apache 或等待未知的時間。
簡短的回答是你不能。 這就是為什么我們建議您使用 plackup(帶 -r)進行快速開發,並將 Apache 僅用於部署(生產使用)。
另一種選擇是開發 apache 進程,並將 MaxRequestsPerChild 設置為非常小的值,這樣您就可以在很短的時間內生成一個新的孩子。 我沒有對此進行測試,如果您運行在同一進程上運行的非開發應用程序,這樣做肯定會影響整個 httpd 的性能(無論如何這首先是個壞主意)。
您可以將您的應用程序移出 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 的情況下重新啟動應用程序。
如果您保存主 fcgi 進程的 pid (--pid $pid_file),您可以輕松地重新啟動加載新代碼。
還有一個模塊可用於管理(啟動、停止、重新啟動)所有 fcgi 池: https://metacpan.org/pod/FCGI::Engine::Manager::Server::Plackup (未測試)
Apache2::重新加載(未經測試)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.