在apach上使用pipenv部署Django应用程序

2024-10-01 09:31:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Django 2.0中使用pipenvvirtualenv创建了一个pythonweb应用程序

现在,我必须在apache服务器上托管它。我已经在服务器中安装了libapache2-mod-wsgi-py3和{}。在

我的应用程序的结构是

myapp_dir
 |- myapp
    |- settings
       |- __init__.py
       |- production.py
    |- __init__.py
    |- urls.py
    |- wsgi.py
 |- otherapp
 |- templates
 |- static_my_project
 |- manage.py
 |- Pipfile
 |- Pipfile.lock

要放置的应用程序的路径

^{pr2}$

我已将所有文件移到该目录,并通过在目录中运行来安装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

虚拟包含

<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

Edit 2

应用程序/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给出了

enter image description here


Tags: pycommodapp应用程序wsgihomeapplication
1条回答
网友
1楼 · 发布于 2024-10-01 09:31:56

首先,为了方便在apache文件中使用,我将pipenv virtualenv的符号链接到myapp_dir/venv。 我遇到的主要问题是权限。在

如果您的虚拟路径是/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用户。在

如果你的许可被拒绝,那可能是同样的问题。 只需尝试更改apache进程可以访问的~/.local和{}的权限。在

请注意,这是一个开发设置,在生产中我不会使用pipenv。我只需要生成requirements.txt并设置一个正常的virtualenv或使用gunicorn或类似的东西。在

相关问题 更多 >