doo*_*oon 5 debian apache2 flask python-3.x debian-buster
Soo,我创建了一个小型 Flask 网站,我想将其部署在带有 Apache 2.4 的 Debian 10 服务器上
首先,我按照教程创建了 apache2 conf 文件和 .wsgi 文件。由于效果不佳,我收到错误“ModuleNotFoundError:没有名为“flask”的模块”,因此我设置了一个虚拟环境
python3 -m venv venv
Run Code Online (Sandbox Code Playgroud)
并将我的 .wsgi 更改为
#!/usr/bin/python3
import sys
import logging
activate_this = '/home/bot/Club-Manager/Webinterface/venv/bin/activate_this.py'
with open(activate_this) as file_:
exec(file_.read(), dict(__file__=activate_this))
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/home/bot/Club-Manager/Webinterface/")
import app as application
Run Code Online (Sandbox Code Playgroud)
现在我明白了
Failed to exec Python script file '/var/www/html/Webinterface/Webinterface.wsgi'
Exception occurred processing WSGI script '/var/www/html/Webinterface/Webinterface.wsgi'., file "/var/www/html/Webinterface/Webinterface.wsgi", line 8, in <module>,
exec(file_.read(), dict(__file__=activate_this))
File "<string>", line 28, in <module>
AttributeError: 'str' object has no attribute 'decode'
Run Code Online (Sandbox Code Playgroud)
起初,“activate_this.py”对我来说并不存在,一些研究告诉我只需从我尝试过的 lib/virtualenv 文件夹中复制它(venv 中的一个和 ~/.local/ 中的一个)。经过更多研究后,我发现您应该使用与运行它相同的 python 版本创建 venv (Duh),我检查并使用 python3 而不是仅仅使用 python 创建了 venv,因为安装了 python3 和 python2 (甚至如果“python”让我进入 python 3.7,但 /usr/bin/python 是 python 2)。我还尝试了 venv/lib/virtualenv 中的“activator.py”文件,但这也不起作用(它确实起作用,但还抛出了烧瓶未找到错误)
我检查并重新安装了 venv 中的依赖项,我检查了它们是否为 python3 安装,确实如此。
所以现在我很迷茫,我猜问题是“activate_this.py”文件,但我不知道如何获得一个功能性的文件,也不知道还有什么可能导致这个问题。将我的请求从域转发到 python 脚本的“Apache2 部分”似乎可以工作(我猜是因为为什么我还能看到错误),所以我没有附加 apache conf,但如果需要,我可以将其发布。我还检查了文件夹的权限, /var/www/html/Webinterface 是 /home/bot/Club-Manager/Webinterface 的符号链接,所有这些文件夹都有 bot:www-data ,这是 apache2 应该使用的用户和组
感谢您提前提供任何提示
我知道这已经有一年了,但如果有人遇到同样的问题......
我发现的最简单/最快/最干净的方法是简单地从 wsgi 文件的 venv 中引用 python 解释器,如下所示:
#!/path/to/your/venv/bin/python
Run Code Online (Sandbox Code Playgroud)
从那里,您的 wsgi 应用程序将使用相应的 python,无需激活、搜索包等。
| 归档时间: |
|
| 查看次数: |
1721 次 |
| 最近记录: |