我已经使用python flask编写了REST,现在我想使用apache来运行它们,以便将它们投入生产,但会出现错误。
结构是这样的:
/opt/myapp/venv/api/app-code.py
if __name__ == '__main__':
app.run()/var/www/html/myapp/myapp.wsgi
import sys
sys.path.insert(0, "/opt/myapp/venv/api")
from app-code import app
application = app/etc/httpd/conf.d/ssl.conf
<VirtualHost *:443>
ServerName hostname.com
DocumentRoot "/var/www/html/myapp"
SSLEngine on
WSGIDaemonProcess myapp python-path=/opt/myapp/venv/lib/python3.6/site-packages/ threads=5
<Directory "/var/www/html/myapp">
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias / /var/www/html/myapp/myapp.wsgi
ErrorLog /var/log/httpd/ssl_error_log
TransferLog /var/log/httpd/ssl_access_log
LogLevel debug
SSLCertificateFile /opt/ssl-certs/ssl-cert.pem
SSLCertificateKeyFile /opt/ssl-certs/ssl-key.pem
SSLCertificateChainFile /opt/ssl-certs/ssl-certchain.pem
</VirtualHost>当我进行API调用时,出现以下错误:
[Sun Jan 14 03:22:50 2018] [info] Initial (No.1) HTTPS request received for child 2 (server hostname.com:443)
[Sun Jan 14 03:22:50 2018] [info] [client 103.3.43.163] mod_wsgi (pid=24539, process='', application='hostname.com|'): Loading WSGI script '/var/www/html/myapp/myapp.wsgi'.
[Sun Jan 14 03:22:50 2018] [error] [client 103.3.43.163] mod_wsgi (pid=24539): Target WSGI script '/var/www/html/myapp/myapp.wsgi' cannot be loaded as Python module.
[Sun Jan 14 03:22:50 2018] [error] [client 103.3.43.163] mod_wsgi (pid=24539): Exception occurred processing WSGI script '/var/www/html/myapp/myapp.wsgi'.
[Sun Jan 14 03:22:50 2018] [error] [client 103.3.43.163] Traceback (most recent call last):
[Sun Jan 14 03:22:50 2018] [error] [client 103.3.43.163] File "/var/www/html/myapp/myapp.wsgi", line 8, in <module>
[Sun Jan 14 03:22:50 2018] [error] [client 103.3.43.163] from app-code import app
[Sun Jan 14 03:22:50 2018] [error] [client 103.3.43.163] File "/opt/myapp/venv/api/app-code.py", line 3, in <module>
[Sun Jan 14 03:22:50 2018] [error] [client 103.3.43.163] from flask import Flask, abort, request, jsonify, g, url_for
[Sun Jan 14 03:22:50 2018] [error] [client 103.3.43.163] ImportError: No module named flask
[Sun Jan 14 03:22:50 2018] [debug] ssl_engine_kernel.c(1894): OpenSSL: Write: SSL negotiation finished successfully我看了很多帖子,尝试了不同的选项,但都不能让它运行。
发布于 2018-01-14 07:59:11
这里最关键的是ImportError。要么flask没有安装在您的虚拟环境中,要么apache没有正确处理venv。我认为您可能希望在WSGIDaemonProcess指令中使用python-home而不是python-path。[http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html](mod_wsgi应该会有所帮助。
发布于 2018-01-15 00:44:43
经过多次尝试,我终于能让它正常工作了。
我使用了错误的wsgi模块作为mod_wsgi.so,在将它改为mod_wsgi_python3.6.so之后,一切都开始工作了。
https://stackoverflow.com/questions/48244714
复制相似问题