[英]deploy django application with pipenv on apache
我使用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
安装所有依赖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
给出
首先,为了方便起见,我在apache文件中使用了pipenv virtualenv到myapp_dir/venv
的符号链接。 我遇到的主要问题是权限。
如果您的virtualenv路径是/home/user/.local/share/virtualenvs/app.application.com-IuTkL8w_
那么试试这个:
sudo -u www-data cat /home/user/.local/share/virtualenvs/app.application.com-IuTkL8w_/bin/activate_this.py`
其中www-data
是你的apache用户。
如果你被许可拒绝,那可能是同样的问题。 只是尝试更改~/.local
和~/.local/share
权限,apache进程可以访问它们。
请注意,这是一个开发设置,在生产中我不会使用pipenv。 我只会生成requirements.txt
并设置一个普通的virtualenv或使用gunicorn或类似的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.