回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在尝试将python dash应用程序部署到我的apache服务器上。我遵循了我所能找到的关于这个配置的少量信息(<a href="https://flask.palletsprojects.com/en/1.1.x/deploying/mod_wsgi/" rel="nofollow noreferrer">officials docs</a>;<a href="https://community.plotly.com/t/deploy-dash-on-apache-server-solved/4855" rel="nofollow noreferrer">this troubleshooting thread was a bit better</a>)。当我访问网站时,页面返回一个<code>500 Internal Server Error</code>,在服务器错误日志中被描述为<code>"Dash object not callable"</code>。以下是配置文件:</p>
<pre><code>>> cat /var/www/html/wsgi/dashGAF.wsgi
#!/usr/bin/python
import sys
sys.path.insert(0,"/home/ubuntu/dashboards/")
from dashGAF import app as application
</code></pre>
<pre><code>>> cat /etc/apache2/sites-available/dash.conf
WSGIDaemonProcess dashGAF user=ubuntu group=ubuntu home=/home/ubuntu threads=5
WSGIScriptAlias /dashGAF /var/www/html/wsgi/dashGAF.wsgi
<Directory /home/ubuntu/dashboards>
WSGIProcessGroup dashGAF
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On
Require all granted
</Directory>
</code></pre>
<pre><code>>> cat dashGAF.py
# -*- coding: utf-8 -*-
import dash
import dash_core_components as dcc
import dash_html_components as html
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets, routes_pathname_prefix='/dashGAF/')
server = app.server
app.layout = html.Div(children=[
html.H1(children='Hello Dash'),
html.Div(children='''
Dash: A web application framework for Python.
'''),
dcc.Graph(
id='example-graph',
figure={
'data': [
{'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'SF'},
{'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Montréal'},
],
'layout': {
'title': 'Dash Data Visualization'
}
}
)
])
if __name__ == '__main__':
app.run_server(debug=True, host='0.0.0.0')
</code></pre>
<p>当我在<code>the_ip_address/dashGAF</code>访问我的dash应用程序时,我得到一个<code>500 Internal Server Error</code>。检查error.log我看到:</p>
<pre><code>[Sat Jun 20 04:42:59.502528 2020] [wsgi:error] [pid 6064:tid 140622992238336] [client 118.210.193.245:50042] mod_wsgi (pid=6064): Exception occurred processing WSGI script '/var/www/html/wsgi/dashGAF.wsgi'.
[Sat Jun 20 04:42:59.502675 2020] [wsgi:error] [pid 6064:tid 140622992238336] [client 118.210.193.245:50042] TypeError: 'Dash' object is not callable
</code></pre>
<p>如果您能帮助解决此问题,我们将不胜感激!此外,对配置文件的任何更改建议都会有所帮助</p>
<p>更多详情:</p>
<ul>
<li>我收到一个模块导入错误,如my/var/log/apache2/error.log中的以下内容:</li>
</ul>
<pre>[Sat Jun 20 03:38:58.556219 2020] [wsgi:error] [pid 583:tid 140297735726848] [client 118.210.193.245:55574] File "/home/ubuntu/dashboards/dashGAF.py", line 2, in <module>
[Sat Jun 20 03:38:58.556265 2020] [wsgi:error] [pid 583:tid 140297735726848] [client 118.210.193.245:55574] import dash
[Sat Jun 20 03:38:58.556285 2020] [wsgi:error] [pid 583:tid 140297735726848] [client 118.210.193.245:55574] ImportError: No module named dash
</pre>
<p>我通过做一个<code>sudo pip install dash==1.13.2</code>来解决这个问题</p>
<ul>
<li><p>我制作了所有的*.py和*.wsgi文件<code>-rwxr-xr-x</code></p>
</li>
<li><p>我使用<code>sudo a2ensite dash.conf</code>启用了站点配置,并使用<code>udo systemctl reload apache2</code>重新加载了配置</p>
</li>
<li><p>我相信正在运行的python版本是python2.7(基于apacheerror.log);不确定具体如何指定2.7或3</p>
</li>
<li><p>如果我将dashGAF.wsgi编辑为具有<code>from dashGAF import server as application</code>,则会出现500个内部错误,但服务器日志中包含以下详细信息:</p>
</li>
</ul>
<pre><code>[Sun Jun 21 06:33:28.181450 2020] [wsgi:error] [pid 12237:tid 139670549669632] [client 118.210.193.245:52221] mod_wsgi (pid=12237): Target WSGI script '/var/www/html/wsgi/dashGAF.wsgi' cannot be loaded as Python module.
[Sun Jun 21 06:33:28.181512 2020] [wsgi:error] [pid 12237:tid 139670549669632] [client 118.210.193.245:52221] mod_wsgi (pid=12237): Exception occurred processing WSGI script '/var/www/html/wsgi/dashGAF.wsgi'.
[Sun Jun 21 06:33:28.181545 2020] [wsgi:error] [pid 12237:tid 139670549669632] [client 118.210.193.245:52221] Traceback (most recent call last):
[Sun Jun 21 06:33:28.181577 2020] [wsgi:error] [pid 12237:tid 139670549669632] [client 118.210.193.245:52221] File "/var/www/html/wsgi/dashGAF.wsgi", line 4, in <module>
[Sun Jun 21 06:33:28.181685 2020] [wsgi:error] [pid 12237:tid 139670549669632] [client 118.210.193.245:52221] from dashGAF import server as application
[Sun Jun 21 06:33:28.181714 2020] [wsgi:error] [pid 12237:tid 139670549669632] [client 118.210.193.245:52221] ImportError: cannot import name server
</code></pre>
<p><strong>可能在该位有一个有用的细节,它说“Target WSGI script'/var/www/html/WSGI/dashGAF.WSGI'不能作为Python模块加载。”??</strong></p>
<ul>
<li>如果我编辑dashGAF.wsgi使其具有<code>application = app.server</code>,我会得到一个404 Not Foun:</li>
</ul>
<pre><code>from dashGAF import app
application = app.server
</code></pre>