簡體   English   中英

帶有 Apache 和 mod_wsgi 的 Django:超時錯誤

[英]Django with Apache and mod_wsgi: Timeout error

我正在嘗試使用 Apache 和 mod_wsgi 在 CentOS 7 服務器上部署 Django 應用程序。 該應用程序正在使用plotly庫來創建圖形,而 plotly 正在使用orca應用程序將創建的圖形導出到圖像。 我使用集成的 django Web 服務器測試了該應用程序 - 一切正常。 所以我根據官方文檔設置了Apache和mod_wsgi。 當我連接到 Apache 時,應用程序可以工作,但無法導出圖形。 瀏覽器以網關超時錯誤告終。 我將記錄器消息插入到創建和導出圖形的代碼中。 代碼運行到這一行:

static_image_bytes = plotly.io.to_image(figure, format='png', width=800, height=450) 

此行應運行本地 Orca 應用程序並將figure對象轉換為 PNG 圖像字節。 Orca 需要 X11 顯示服務器,安裝 CentOS 時沒有 GUI。 我正在使用 Xvfb 來模擬 X11(根據 Orca 的 github 頁面)。 Orca 應用程序是從 github 下載的 AppImage。

/bin/逆戟鯨

#!/bin/bash
echo "`date` - ORCA STARTING with $@" >> /tmp/orca.log
xvfb-run /usr/u/s/orca-1.2.1-x86_64.AppImage "$@"
echo "`date` - ORCA FINISHED" >> /tmp/orca.log  

另外,我嘗試使用以下方法將/bin/orca直接鏈接到 AppImage:

ln -s /usr/u/s/orca-1.2.1-x86_64.AppImage /bin/orca

並將這一行添加到我的代碼中:

plotly.io.orca.config.use_xvfb = True  

Apache 錯誤日志:

[Thu Jul 11 14:15:27.353433 2019] [wsgi:info] [pid 6289] mod_wsgi (pid=6289): Attach interpreter ''.
[Thu Jul 11 14:15:27.356811 2019] [wsgi:info] [pid 6290] mod_wsgi (pid=6290): Attach interpreter ''.
[Thu Jul 11 14:15:27.373538 2019] [wsgi:info] [pid 6282] mod_wsgi (pid=6282, process='myapp', application=''): Loading Python script file '/usr/u/s/myapp/myapp/wsgi.py'.
[Thu Jul 11 14:15:27.380468 2019] [wsgi:info] [pid 6285] mod_wsgi (pid=6285): Adding '/usr/u/s/myapp' to path.
[Thu Jul 11 14:15:27.400423 2019] [wsgi:info] [pid 6283] mod_wsgi (pid=6283): Adding '/usr/u/s/myapp' to path.
[Thu Jul 11 14:15:27.401219 2019] [wsgi:info] [pid 6283] mod_wsgi (pid=6283, process='myapp', application=''): Loading Python script file '/usr/u/s/myapp/myapp/wsgi.py'.
[Thu Jul 11 14:15:27.419272 2019] [wsgi:info] [pid 6284] mod_wsgi (pid=6284): Adding '/usr/u/s/myapp' to path.
[Thu Jul 11 14:15:27.420060 2019] [wsgi:info] [pid 6284] mod_wsgi (pid=6284, process='myapp', application=''): Loading Python script file '/usr/u/s/myapp/myapp/wsgi.py'.
[Thu Jul 11 14:15:27.422329 2019] [wsgi:info] [pid 6285] mod_wsgi (pid=6285, process='myapp', application=''): Loading Python script file '/usr/u/s/myapp/myapp/wsgi.py'.
[Thu Jul 11 14:15:33.050402 2019] [wsgi:info] [pid 6419] mod_wsgi (pid=6419): Initializing Python.
[Thu Jul 11 14:15:33.077239 2019] [wsgi:info] [pid 6419] mod_wsgi (pid=6419): Attach interpreter ''.
[Thu Jul 11 14:25:38.116842 2019] [wsgi:error] [pid 6287] [client 192.168.1.12:57406] Timeout when reading response headers from daemon process 'myapp': /usr/u/s/myapp/myapp/wsgi.py, referer: http://192.168.1.13/myapp/reports/new/
[Thu Jul 11 14:25:38.116918 2019] [reqtimeout:info] [pid 6287] [client 192.168.1.12:57406] AH01382: Request body read timeout

Apache httpd.conf


LogLevel info
TimeOut 600

LoadModule wsgi_module modules/mod_wsgi.so
WSGISocketPrefix /var/run/httpd/wsgi

WSGIDaemonProcess myapp python-home=/usr/u/s/env/myapp python-path=/usr/u/s/myapp threads=1 processes=32
WSGIScriptAlias /myapp /usr/u/s/myapp/myapp/wsgi.py process-group=myapp application-group=%{GLOBAL}

<Directory /usr/u/s/myapp>
Require all granted
</Directory>

SELinux 設置為 Permissive 模式。

我用谷歌搜索並搜索了 stackoverflow 幾個小時,嘗試了 mod_wsgi 的各種解決方案和配置,但它們似乎都沒有改變任何東西。 請幫忙。 感謝您的任何想法。

我不知道以下內容是否解決了 OP 問題,但以防萬一它對某人有幫助,我正在添加一些上下文(我不確定上面 OP 的評論是什么意思)。

我正在努力使Google Python 客戶端 Dialogflow庫在 Apache 下使用 WSGI 和 SElinux 工作。 我在責怪 SElinux,但Deepak Kumar上面的評論給了我一個解決方案。

添加到 WSGI Apache config 行

WSGIApplicationGroup %{GLOBAL}

正如這里所建議的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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