【问题标题】:Configuring Apache/2.4.10 mod_wsgi and virtualenv python 3.6 for flask 1.0.3 on debian 8.11在 debian 8.11 上为 flask 1.0.3 配置 Apache/2.4.10 mod_wsgi 和 virtualenv python 3.6
【发布时间】:2020-02-24 11:56:24
【问题描述】:

我的 apache 配置文件有:

<VirtualHost *:80> 

ServerName localhost
WSGIDaemonProcess tasks4 python-path=/home/user1/Projects/tasks/tasks/tasks/wsgi.py:/home/user1/env_rt_dms:/home/user1/env_rt_dms/lib/python3.6/site-packages
WSGIScriptAlias / /home/user1/Projects/tasks/tasks/tasks/wsgi.py

WSGIPassAuthorization On

Alias /rt1 /home/user1/Projects/tasks/tasks/tasks/static/

<Directory /home/user1/Projects/tasks/tasks>
    DirectoryIndex index.html
    WSGIProcessGroup tasks4
    WSGIApplicationGroup %{GLOBAL}
    WSGIScriptReloading On
    Require all granted
</Directory>
</VirtualHost>

wsgi 文件:

#! /home/user1/env_rt_dms/bin
import sys, os

activate_this = '/home/user1/env_rt_dms/bin/activate_this.py'
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))

os.environ['DB_URL']="postgresql://usernm:passwd1@localhost:5432/my_db"

from tasks import app as application
application.secret_key = '\x04\xf5\\VN:\xb7\xb9\xca\x95\xa3m!4@\x17\xfcg\xe5\xe2q\x05'

激活apache web服务器后的浏览器url:http://localhost/rt1给出404错误

apache 日志显示:mod_wsgi: Compiled for Python/3.4.2 作为警告。请让我知道我需要解决什么问题才能使此配置正常工作?

【问题讨论】:

  • “apache 日志显示:mod_wsgi: Compiled for Python/3.4.2 as warning”。你的python虚拟环境中安装了什么版本的python?为WSGIDaemonProcess 指令的python-path 选项配置的第一个目录是文件路径。您需要将其更正为包含应用程序的 wsgi.py 模块的文件夹。
  • @OluwafemiSule 1.将 WSGIDaemonProcess 更改为 tasks4 python-path=/home/user1/Projects/tasks/tasks/tasks/ 并尝试过。 2.也找不到用python/3.6编译的mod_wsgi。因此发布。此外,这只是一个警告,没有错误。您还能发现其他问题吗?

标签: python-3.x apache flask


【解决方案1】:

应该设置WSGIDaemonProcess指令的python-home选项。

激活您在终端中安装了mod_wsgi 的虚拟环境。

在终端中运行命令python -c "import sys; print(sys.prefix)",复制输出,并将其设置为python-home选项。

WSGIDaemonProcess tasks4 python-path=/home/user1/Projects/tasks/tasks/tasks python-home=<sys_prefix_value_in_virtual_env>

删除wsgi.py模块中手动激活虚拟环境。

#!/usr/bin/env python

import sys, os

os.environ['DB_URL']="postgresql://usernm:passwd1@localhost:5432/my_db"

from tasks import app as application
application.secret_key = '\x04\xf5\\VN:\xb7\xb9\xca\x95\xa3m!4@\x17\xfcg\xe5\xe2q\x05'

查看python-path 选项并确保/home/user1/Project/tasks/tasks/tasks 是您项目的根文件夹。

【讨论】:

  • 应该安装哪个mod_wsgi? mod_wsgi 的系统范围安装:apt-get install libapache2-mod-wsgi-py3 是我所做的。在 virtualenv 中:我无法安装:$ pip install libapache2-mod-wsgi-py3 错误:找不到满足 libapache2-mod-wsgi-py3 要求的版本(来自版本:无)错误:找不到 libapache2- 的匹配分发mod-wsgi-py3
  • 我在 /home/user1 文件夹中创建了我的 virtualenv,我也为另一个项目激活了该文件夹
  • 当命令在 virtualenv 中运行时, python -c "import sys; print(sys.prefix)" 我得到 '/usr/local' 。系统范围内还安装了 python 3.6
  • sys.prefix 虚拟环境中的值不正确。我建议为项目设置一个单独的虚拟环境。检查sys.prefix 值是否从/usr/local 更改为新虚拟环境中包含python 的文件夹。您可以通过运行pip install mod_wsgi 在虚拟环境中安装mod_wsgi。请参阅package page安装到 Python 部分。
  • (env_dms_rt) user1@debian:~/Projects/tasks$ python -c "import sys; print(sys.prefix)" /usr/local (env_dms_rt) user1@debian:~/Projects/ tasks$ python3 -c "import sys; print(sys.prefix)" /home/user1/Projects/tasks/env_dms_rt 如何查看正在使用哪个?
猜你喜欢
  • 2012-06-09
  • 2016-08-12
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 2017-12-08
  • 2017-12-06
相关资源
最近更新 更多