Pavel Antspovich
Pavel Antspovich

Reputation: 1221

Couldn't find WSGI module deploying Heroku

Trying to deploy my app with this tutorial. Have a ModuleNotFoundError: No module named 'radio.wsgi' message.

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.

In some other questions people recomends python manage.py run_gunicorn but I have 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()

In only those files WSGI is mentioned.

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

This is project structure

├── 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

Upvotes: 6

Views: 1926

Answers (2)

Bubai
Bubai

Reputation: 1240

After login from terminal using heroku login by downloading Heroku CLI, you can deploy on heroku using git by following:

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

The ideal project structure shuold be like this...

   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

Upvotes: 1

Alasdair
Alasdair

Reputation: 308839

Heroku expects Procfile to be in the project root. It is easiest to deploy a Django app if manage.py is in the project root as well. For example, if your project layout was:

├── 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

then you can run:

web: gunicorn radio.wsgi

In your case, your Django project is in the radio directoy. If you don't want to change the project layout, then you need to add radio to the python path so that python imports work:

web: gunicorn --pythonpath radio radio.wsgi

Upvotes: 9

Related Questions