1

I am following the "Getting Started with Python on Heroku" official tutorial. I think the tutorial is basically about setting up a Django Hello World, even though I have not seen the outcome yet.

These steps worked:

   $ git clone https://github.com/heroku/python-getting-started.git
   $ heroku create
   $ git push heroku master

Output for last command (important part in my opinion):

...
remote: -----> Python app detected
remote: -----> Installing runtime (python-2.7.9)
remote: -----> Installing dependencies with pip
remote:        Collecting dj-database-url==0.3.0 (from -r requirements.txt (line 1))
remote:          Downloading dj_database_url-0.3.0-py2.py3-none-any.whl
remote:        Collecting Django==1.8.1 (from -r requirements.txt (line 2))
remote:          Downloading Django-1.8.1-py2.py3-none-any.whl (6.2MB)
remote:        Collecting django-postgrespool==0.3.0 (from -r requirements.txt (line 3))
remote:          Downloading django-postgrespool-0.3.0.tar.gz
remote:        Collecting gunicorn==19.3.0 (from -r requirements.txt (line 4))
remote:          Downloading gunicorn-19.3.0-py2.py3-none-any.whl (110kB)
remote:        Collecting psycopg2==2.6 (from -r requirements.txt (line 5))
remote:          Downloading psycopg2-2.6.tar.gz (367kB)
remote:        Collecting SQLAlchemy==1.0.4 (from -r requirements.txt (line 6))
remote:          Downloading SQLAlchemy-1.0.4.tar.gz (4.6MB)
remote:        Collecting whitenoise==1.0.6 (from -r requirements.txt (line 7))
remote:          Downloading whitenoise-1.0.6-py2.py3-none-any.whl
remote:        Installing collected packages: dj-database-url, Django, psycopg2, SQLAlchemy, django-postgrespool, gunicorn, whitenoise
remote:          Running setup.py install for psycopg2
remote:          Running setup.py install for SQLAlchemy
remote:          Running setup.py install for django-postgrespool
remote:        Successfully installed Django-1.8.1 SQLAlchemy-1.0.4 dj-database-url-0.3.0 django-postgrespool-0.3.0 gunicorn-19.3.0 psycopg2-2.6 whitenoise-1.0.6
...

Further commands:

$ heroku ps:scale web=1
$ heroku open

Then a Procfile defined with the following line:

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

Then created a virtualenv (tried with both Python 2.7.6. and 3.4.2):

$ virtual venv
$ source venv/bin/activate
$ pip install -r requirements.txt --allow-all-external

First time around I had a problem with psycopg2-2.6, which then I believe I successfully installed. Here are all the requirements: - dj-database-url==0.3.0 - Django==1.8.1 - django-postgrespool==0.3.0 - gunicorn==19.3.0 - psycopg2==2.6 - SQLAlchemy==1.0.4 - whitenoise==1.0.6

THIS IS WHERE I GOT STUCK:

foreman start web

Called from the main directory of this project structure:

python-getting-started/
├── Procfile
├── Procfile.windows
├── README.md
├── gettingstarted
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-34.pyc
│   │   ├── settings.cpython-34.pyc
│   │   └── wsgi.cpython-34.pyc
│   ├── settings.py
│   ├── static
│   │   └── humans.txt
│   ├── urls.py
│   └── wsgi.py
├── hello
│   ├── __init__.py
│   ├── __pycache__
│   │   └── __init__.cpython-34.pyc
│   ├── admin.py
│   ├── models.py
│   ├── templates
│   │   └── db.html
│   ├── tests.py
│   └── views.py
├── manage.py
├── requirements.txt
└── runtime.txt

The output of the last command is:

23:35:07 web.1  | started with pid 6296
23:35:07 web.1  | [2015-06-14 23:35:07 +0100] [6296] [INFO] Starting gunicorn 19.3.0
23:35:07 web.1  | [2015-06-14 23:35:07 +0100] [6296] [INFO] Listening at: http://0.0.0.0:5000 (6296)
23:35:07 web.1  | [2015-06-14 23:35:07 +0100] [6296] [INFO] Using worker: sync
23:35:07 web.1  | [2015-06-14 23:35:07 +0100] [6299] [INFO] Booting worker with pid: 6299
23:35:07 web.1  | [2015-06-14 22:35:07 +0000] [6299] [ERROR] Exception in worker process:
23:35:07 web.1  | Traceback (most recent call last):
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/db/utils.py", line 111, in load_backend
23:35:07 web.1  |     return import_module('%s.base' % backend_name)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/importlib/__init__.py", line 109, in import_module
23:35:07 web.1  |     return _bootstrap._gcd_import(name[level:], package, level)
23:35:07 web.1  |   File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
23:35:07 web.1  |   File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
23:35:07 web.1  |   File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
23:35:07 web.1  |   File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
23:35:07 web.1  |   File "<frozen importlib._bootstrap>", line 1129, in _exec
23:35:07 web.1  |   File "<frozen importlib._bootstrap>", line 1471, in exec_module
23:35:07 web.1  |   File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django_postgrespool/base.py", line 8, in <module>
23:35:07 web.1  |     from psycopg2 import InterfaceError, ProgrammingError, OperationalError
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/psycopg2/__init__.py", line 50, in <module>
23:35:07 web.1  |     from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
23:35:07 web.1  | ImportError: dlopen(/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: libssl.1.0.0.dylib
23:35:07 web.1  |   Referenced from: /Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/psycopg2/_psycopg.so
23:35:07 web.1  |   Reason: image not found
23:35:07 web.1  |
23:35:07 web.1  | During handling of the above exception, another exception occurred:
23:35:07 web.1  |
23:35:07 web.1  | Traceback (most recent call last):
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/gunicorn/arbiter.py", line 507, in spawn_worker
23:35:07 web.1  |     worker.init_process()
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/gunicorn/workers/base.py", line 118, in init_process
23:35:07 web.1  |     self.wsgi = self.app.wsgi()
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/gunicorn/app/base.py", line 67, in wsgi
23:35:07 web.1  |     self.callable = self.load()
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
23:35:07 web.1  |     return self.load_wsgiapp()
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
23:35:07 web.1  |     return util.import_app(self.app_uri)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/gunicorn/util.py", line 355, in import_app
23:35:07 web.1  |     __import__(module)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/gettingstarted/wsgi.py", line 16, in <module>
23:35:07 web.1  |     application = get_wsgi_application()
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
23:35:07 web.1  |     django.setup()
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/__init__.py", line 18, in setup
23:35:07 web.1  |     apps.populate(settings.INSTALLED_APPS)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/apps/registry.py", line 108, in populate
23:35:07 web.1  |     app_config.import_models(all_models)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/apps/config.py", line 198, in import_models
23:35:07 web.1  |     self.models_module = import_module(models_module_name)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/importlib/__init__.py", line 109, in import_module
23:35:07 web.1  |     return _bootstrap._gcd_import(name[level:], package, level)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/contrib/auth/models.py", line 41, in <module>
23:35:07 web.1  |     class Permission(models.Model):
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/db/models/base.py", line 139, in __new__
23:35:07 web.1  |     new_class.add_to_class('_meta', Options(meta, **kwargs))
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/db/models/base.py", line 324, in add_to_class
23:35:07 web.1  |     value.contribute_to_class(cls, name)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/db/models/options.py", line 250, in contribute_to_class
23:35:07 web.1  |     self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/db/__init__.py", line 36, in __getattr__
23:35:07 web.1  |     return getattr(connections[DEFAULT_DB_ALIAS], item)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/db/utils.py", line 240, in __getitem__
23:35:07 web.1  |     backend = load_backend(db['ENGINE'])
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/db/utils.py", line 129, in load_backend
23:35:07 web.1  |     raise ImproperlyConfigured(error_msg)
23:35:07 web.1  | django.core.exceptions.ImproperlyConfigured: 'django_postgrespool' isn't an available database backend.
23:35:07 web.1  | Try using 'django.db.backends.XXX', where XXX is one of:
23:35:07 web.1  |     'base', 'mysql', 'oracle', 'postgresql_psycopg2', 'sqlite3'
23:35:07 web.1  | Error was: dlopen(/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: libssl.1.0.0.dylib
23:35:07 web.1  |   Referenced from: /Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/psycopg2/_psycopg.so
23:35:07 web.1  |   Reason: image not found
23:35:07 web.1  | Traceback (most recent call last):
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/db/utils.py", line 111, in load_backend
23:35:07 web.1  |     return import_module('%s.base' % backend_name)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/importlib/__init__.py", line 109, in import_module
23:35:07 web.1  |     return _bootstrap._gcd_import(name[level:], package, level)
23:35:07 web.1  |   File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
23:35:07 web.1  |   File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
23:35:07 web.1  |   File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
23:35:07 web.1  |   File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
23:35:07 web.1  |   File "<frozen importlib._bootstrap>", line 1129, in _exec
23:35:07 web.1  |   File "<frozen importlib._bootstrap>", line 1471, in exec_module
23:35:07 web.1  |   File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django_postgrespool/base.py", line 8, in <module>
23:35:07 web.1  |     from psycopg2 import InterfaceError, ProgrammingError, OperationalError
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/psycopg2/__init__.py", line 50, in <module>
23:35:07 web.1  |     from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
23:35:07 web.1  | ImportError: dlopen(/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: libssl.1.0.0.dylib
23:35:07 web.1  |   Referenced from: /Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/psycopg2/_psycopg.so
23:35:07 web.1  |   Reason: image not found
23:35:07 web.1  |
23:35:07 web.1  | During handling of the above exception, another exception occurred:
23:35:07 web.1  |
23:35:07 web.1  | Traceback (most recent call last):
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/gunicorn/arbiter.py", line 507, in spawn_worker
23:35:07 web.1  |     worker.init_process()
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/gunicorn/workers/base.py", line 118, in init_process
23:35:07 web.1  |     self.wsgi = self.app.wsgi()
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/gunicorn/app/base.py", line 67, in wsgi
23:35:07 web.1  |     self.callable = self.load()
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
23:35:07 web.1  |     return self.load_wsgiapp()
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
23:35:07 web.1  |     return util.import_app(self.app_uri)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/gunicorn/util.py", line 355, in import_app
23:35:07 web.1  |     __import__(module)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/gettingstarted/wsgi.py", line 16, in <module>
23:35:07 web.1  |     application = get_wsgi_application()
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
23:35:07 web.1  |     django.setup()
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/__init__.py", line 18, in setup
23:35:07 web.1  |     apps.populate(settings.INSTALLED_APPS)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/apps/registry.py", line 108, in populate
23:35:07 web.1  |     app_config.import_models(all_models)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/apps/config.py", line 198, in import_models
23:35:07 web.1  |     self.models_module = import_module(models_module_name)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/importlib/__init__.py", line 109, in import_module
23:35:07 web.1  |     return _bootstrap._gcd_import(name[level:], package, level)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/contrib/auth/models.py", line 41, in <module>
23:35:07 web.1  |     class Permission(models.Model):
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/db/models/base.py", line 139, in __new__
23:35:07 web.1  |     new_class.add_to_class('_meta', Options(meta, **kwargs))
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/db/models/base.py", line 324, in add_to_class
23:35:07 web.1  |     value.contribute_to_class(cls, name)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/db/models/options.py", line 250, in contribute_to_class
23:35:07 web.1  |     self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/db/__init__.py", line 36, in __getattr__
23:35:07 web.1  |     return getattr(connections[DEFAULT_DB_ALIAS], item)
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/db/utils.py", line 240, in __getitem__
23:35:07 web.1  |     backend = load_backend(db['ENGINE'])
23:35:07 web.1  |   File "/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/django/db/utils.py", line 129, in load_backend
23:35:07 web.1  |     raise ImproperlyConfigured(error_msg)
23:35:07 web.1  | django.core.exceptions.ImproperlyConfigured: 'django_postgrespool' isn't an available database backend.
23:35:07 web.1  | Try using 'django.db.backends.XXX', where XXX is one of:
23:35:07 web.1  |     'base', 'mysql', 'oracle', 'postgresql_psycopg2', 'sqlite3'
23:35:07 web.1  | Error was: dlopen(/Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: libssl.1.0.0.dylib
23:35:07 web.1  |   Referenced from: /Users/janosbana/developer/playground/Python/heroku/python-getting-started/venv/lib/python3.4/site-packages/psycopg2/_psycopg.so
23:35:07 web.1  |   Reason: image not found
23:35:07 web.1  | [2015-06-14 22:35:07 +0000] [6299] [INFO] Worker exiting (pid: 6299)
23:35:07 web.1  | [2015-06-14 23:35:07 +0100] [6296] [INFO] Shutting down: Master
23:35:07 web.1  | [2015-06-14 23:35:07 +0100] [6296] [INFO] Reason: Worker failed to boot.
23:35:07 web.1  | exited with code 3
23:35:07 system | sending SIGTERM to all processes

Please note that I have postgres (PostgreSQL) 9.4.4 installed on OSX Yosemite.

I think there is some problem with the database configuration, but I am very new to this and find it hard to workout what has happened from the debug log. I have searched the web trying to find similar cases the output of the last command, however I did not find anything the had the exact same nature as mine.

Has anyone experienced anything similar? Please help to figure out what to do about it.

EDIT:

An additional step appeared in the Heroku tutorial since this question was asked.

Run the app locally step has the following command now:

$ python manage.py collectstatic

This line was added before the step where I got stuck:

$ foreman start web
1
  • You should post the DATABASES section of your settings.py. Commented Jun 14, 2015 at 22:46

1 Answer 1

3

Based on your error, django.core.exceptions.ImproperlyConfigured: 'django_postgrespool' isn't an available database backend., it appears your DATABASE setting is improperly configured.

In your settings file, since you're using postgresql, make sure the database ENGINE is set to 'django.db.backends.postgresql_psycopg2'. See the databases docs and the database engine docs.

Sign up to request clarification or add additional context in comments.

1 Comment

This worked. Thanks for the answer. Unfortunately I cannot up vote your answer as I do not have enough reputation points.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.