簡體   English   中英

如何在不重啟的情況下在 Apache 中部署 PSGI 腳本?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM