找不到部署Heroku的WSGI模块

时间:2019-08-21 08:31:12

标签: python django heroku wsgi

尝试通过this教程部署我的应用。收到ModuleNotFoundError: No module named 'radio.wsgi'消息。

2019-08-21T08:08:21.409841+00:00 app[web.1]: __import__(module)
2019-08-21T08:08:21.409849+00:00 app[web.1]: ModuleNotFoundError: No module named 'radio.wsgi'
2019-08-21T08:08:21.409960+00:00 app[web.1]: [2019-08-21 08:08:21 +0000] [10] [INFO] Worker exiting (pid: 10)
2019-08-21T08:08:21.441211+00:00 app[web.1]: [2019-08-21 08:08:21 +0000] [4] [INFO] Shutting down: Master
2019-08-21T08:08:21.441415+00:00 app[web.1]: [2019-08-21 08:08:21 +0000] [4] [INFO] Reason: Worker failed to boot.

在其他一些问题中,人们推荐python manage.py run_gunicorn,但我有Unknown command: 'run_gunicorn'

Procfile:

web: gunicorn radio.wsgi --log-file -

wsgi.py

import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'radio.settings')
application = get_wsgi_application()

仅在那些文件中提到了WSGI。

requirements.txt

dj-database-url==0.5.0
Django==2.2.4
gunicorn==19.9.0
lxml==4.4.1
psycopg2-binary==2.8.3
pytz==2019.2
sqlparse==0.3.0
whitenoise==4.1.3

这是项目结构

├── radio
│   ├── db.sqlite3
│   ├── manage.py
│   ├── player
│   ├── radio
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   ├── settings.py
│   │   ├── urls.py
│   │   └── wsgi.py
│   ├── setup.py
│   └── static
├── README.md
├── .gitignore
├── requirements.txt
├── runtime.txt
└── Procfile

2 个答案:

答案 0 :(得分:1)

Heroku期望Procfile位于项目根目录中。如果manage.py也位于项目根目录中,则最容易部署Django应用。例如,如果您的项目布局为:

├── db.sqlite3
├── manage.py
├── player
├── radio
│   ├── __init__.py
│   ├── __pycache__
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── setup.py
├── static
├── README.md
├── .gitignore
├── requirements.txt
├── runtime.txt
└── Procfile

然后您可以运行:

web: gunicorn radio.wsgi

在您的情况下,您的Django项目在radio指令中。如果您不想更改项目布局,则需要在python路径中添加radio以便python导入起作用:

web: gunicorn --pythonpath radio radio.wsgi

答案 1 :(得分:1)

从终端使用heroku login通过下载Heroku CLI登录后,可以通过herokugit上进行部署:

git init
git add .
heroku create <app_name> --region <region_name>
git commit -am "SOME MESSAGE"
heroku config:set DEBUG_COLLECTSTATIC=1
heroku ps:scale web=1    // (optional)
git push heroku master

理想的项目结构应该像这样...

   radio
   ├── db.sqlite3
   ├── manage.py
   ├── player
   ├── radio
   │   ├── __init__.py
   │   ├── settings.py
   │   ├── urls.py
   │   └── wsgi.py
   ├── setup.py
   ├── static
   ├── README.md
   ├── requirements.txt
   ├── runtime.txt
   └── Procfile