標題很長,本文內容很簡單。在現在的 Python 開發中,虛擬環境是必不可少的,但有時候,虛擬環境會給我們帶來一些不必要的麻煩或說坑,例如今天要談到的 Flask 應用程式託管的問題。
Nginx + uWSGI 可以說是Python Web 專案託管的不二之選,當然,如果只是自己開發測試,或者應用在訪問量很小的應用上,Gunicorn 甚至Web 框架自帶的web server 也許就夠了,但是我們逃不開會碰到這對王者組合的情況,今天我就遇到了這樣的坑。在依照官方文件分別配置 Nginx 和 uWSGI 後,使用 uwsgi 的命令語句啟動,沒有任何問題,但是嘗試使用 ini 配置啟動 uWSGI 後,則會遇到一直報 502 bad gateway
的錯誤。
一番排查後——排查過程不表——發現問題所在,我的uWSGI 安裝在了專案的virtualenv 目錄中,然而ini 配置文件卻沒有配置虛擬環境目錄,而網上現有的博客教程裡的ini 配置都是沒有提到這個問題的,所以,我們加上虛擬環境的配置,並且注意,最好加上plugin = python
這一條配置,當然了,這個需要提前安裝,具體如何安裝,不是本文重點,暫不贅述了。
所以,我最終的 ini 設定檔內容如下:
<code><span>[uwsgi]</span><span>plugins = <span>python</span></span><span>vhost = <span><span>true</span></span></span><span>chdir = <span>/home/k/Documents/demo</span></span><span>venv = <span>/home/k/Documents/demo/venv</span></span>#python module to import <span>app = <span>main</span></span><span>module = <span>%(app)</span></span>#socket file's location <span>socket = <span>/home/k/Documents/demo/%n.sock</span></span>#permissions for the socket file <span>chmod-socket = <span><span>666</span></span></span>#the variable that holds a flask application inside the module imported at line #6 <span>callable = <span>app</span></span>#location of log files <span>logto = <span>/home/k/Documents/demo/%n.log</span></span><span>processes = <span><span>4</span></span></span><span>threads = <span><span>2</span></span></span></code>
而我的專案目錄結構則是:
<code>demo/ |____venv/ |____main<span>.py</span><span># 这个是应用的启动文件(对应 ini 配置中的 app)</span> |____uwsgi<span>.ini</span> |____uwsgi<span>.sock</span> |____uwsgi<span>.log</span> |____access<span>.log</span><span># 这个是 Nginx 中的 access 日志配置</span> |____error<span>.log</span><span># 这个是 Nginx 中的 error 日志配置</span></code>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });
以上就介紹了Ubuntu 1404 配置 Nginx + uWSGI 託管 virtualenv 下 Flask 應用的一點注意事項,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。