Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Configuring gunicorn for Django on Heroku

I'm trying to setup a test Django project on Heroku. Following the advice here and in the Heroku Getting Started I'm trying to use gunicorn instead of the Django dev server.

This was my first attempt at the Procfile:

web: gunicorn_django --workers=4 --bind=0.0.0.0:$PORT my_project/settings.py
worker: python my_project/manage.py celeryd -E -B --loglevel=INFO

This gave me this error:

ImportError: Could not import settings 'settings.py' (Is it on sys.path?): No module named py

I decided to take a different track and followed the advice here. Now my Procfile looked like this:

web: gunicorn_django -b 0.0.0.0:\$PORT -w 9 -k gevent --max-requests 250 --preload my_project.settings

(I also updated my requirements file to include gevent.) It gave me the same error:

ImportError: Could not import settings

Finally, I just set it to settings:

web: gunicorn_django -b 0.0.0.0:\$PORT -w 9 -k gevent --max-requests 250 --preload settings

But now I get this error:

Error: django project not found

The way my Django project is set up is that the settings.py file is in the parent directory of the repo -- I don't have the Django project under another directory. It's at the same level as the virtualenv and git files. Would that be a problem? I'm sure I'm doing something simple wrong -- any help would be much appreciated.


If I follow the instructions from Heroku here and change the Procfile to this:

web: gunicorn hellodjango.wsgi -b 0.0.0.0:$PORT

Nothing happens -- no errors in the logs, but no proceses run and the app just appears dead in the water.

like image 200
tchaymore Avatar asked May 10 '12 04:05

tchaymore


People also ask

Does Heroku use Gunicorn?

Gunicorn is a python WSGI HTTP server that will serve your Flask application at heroku.

What is a Procfile in Django?

The basics. First, and most importantly, Heroku web applications require a Procfile . This file is used to explicitly declare your application's process types and entry points. It is located in the root of your repository. Procfile web: gunicorn myproject.wsgi.


1 Answers

I have just run into this same issue. In the procfile you copied from the Heroku guide, change hellodjango.wsgi to yourproject.wsgi

Looks like we all fall victim to blindly copy-pasting now and then, but in your (and my) defense, it looks like there's no *.wsgi file that's actually being opened, it's just how you signal to gunicorn that you want it to run your django project.

like image 65
J C Avatar answered Sep 18 '22 18:09

J C