【发布时间】:2018-11-01 01:08:36
【问题描述】:
我使用pipenv virtualenv 在Django 2.0 创建了一个python web 应用程序
现在,我必须将它托管在 apache 服务器上。我已经在服务器中安装了libapache2-mod-wsgi-py3 和python-setuptools。
我的应用程序的结构是这样的
myapp_dir
|- myapp
|- settings
|- __init__.py
|- production.py
|- __init__.py
|- urls.py
|- wsgi.py
|- otherapp
|- templates
|- static_my_project
|- manage.py
|- Pipfile
|- Pipfile.lock
应用的路径
/home/user/app.application.com/
我已将所有文件移动到该目录并通过在该目录中运行安装了来自Pipfile 的所有依赖项
pipenv install
这已经创建了一个virtualenv并安装了所有需要的模块和pipenv --venv给出的路径
# pipenv --venv
/home/user/.local/share/virtualenvs/app.application.com-IuTkL8w_
我的VirtualHost 配置看起来像
ServerName app.application.com
ServerAlias app.application.com
ErrorLog /home/user/error.log
CustomLog /home/user/custom.log combined
Alias /static /home/user/app.application.com/static_my_project
<Directory /home/user/app.application.com/static_my_project>
Require all granted
</Directory>
<Directory /home/user/app.application.com/pricearbitrase>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIScriptAlias / /home/user/app.application.com/myapp/wsgi.py
VirtualInclude 包含
<IfModule mod_wsgi>
WSGIPythonHome /home/user/.local/share/virtualenvs/app.application.com-IuTkL8w_
</IfModule>
但在访问http://app.application.com 时会给出Internal server error 并且生成的日志文件包含
[wsgi:error] [pid 60730] mod_wsgi (pid=60730): Target WSGI script '/home/amzitrage/app.amzitrage.com/pricearbitrase/wsgi.py' cannot be loaded as Python module.
[wsgi:error] [pid 60730] mod_wsgi (pid=60730): Exception occurred processing WSGI script '/home/amzitrage/app.amzitrage.com/pricearbitrase/wsgi.py'.
[wsgi:error] [pid 60730] Traceback (most recent call last):
[wsgi:error] [pid 60730] File "/home/amzitrage/app.amzitrage.com/pricearbitrase/wsgi.py", line 12, in <module>
[wsgi:error] [pid 60730] from django.core.wsgi import get_wsgi_application
[wsgi:error] [pid 60730] ImportError: No module named django.core.wsgi
编辑 2
app/wsgi.py
修改wsgi.py文件激活virtual environment
activate_this = '/home/user/.local/share/virtualenvs/app.application.com-IuTkL8w_/bin/activate_this.py'
exec(compile(open(activate_this,"rb").read(),activate_this, 'exec'), dict(__file__=activate_this))
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "application.settings")
application = get_wsgi_application()
另外,ls -l /path_to_pipenv_venv/bin 给了
【问题讨论】:
-
删除
/bin仍然是同样的错误 -
@Alasdair 删除
/bin后是否需要重新运行服务器? -
您似乎还缺少
WSGIPythonPath(参见Django docs 中的示例),但这会导致加载myapp而不是django时出现问题。 -
如果我设置
WSGIPythonPath这个配置的路径是什么
标签: python django pipenv django-deployment