gpt4 book ai didi

python - 在 apache 上使用 pipenv 部署 django 应用程序

转载 作者:行者123 更新时间:2023-11-28 17:06:45 25 4
gpt4 key购买 nike

我在 Django 2.0 中使用 pipenv virtualenv 创建了一个 python web 应用程序

现在,我必须将它托管在 apache 服务器上。我已经在服务器中安装了 libapache2-mod-wsgi-py3python-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

Edit 2

应用程序/wsgi.py修改wsgi.py文件激活虚拟环境

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

最佳答案

首先,为了在 apache 文件中使用时方便,我将 pipenv virtualenv 的符号链接(symbolic link)指向 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 或类似的东西。

关于python - 在 apache 上使用 pipenv 部署 django 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50464727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com