2012-11-29 21 views
5

Tôi đang cố gắng để đẩy một ứng dụng django để heroku và nhận được một lỗi mà tôi đã không nhìn thấy bất cứ nơi nào trong các diễn đàn heroku hoặc stackoverflow. Tôi đang sử dụng postgres.Heroku đẩy ứng dụng django được "Không có mô-đun tên psycopg2.extensions"

Tôi không biết phải tiến hành ở đâu; Tôi không thấy gì trong bất kỳ tài liệu nào nói rằng điều gì sai. Các lỗi chủ yếu là:

ImportError: Không có mô-đun tên psycopg2.extensions

... nhưng cấu hình Heroku là một trong đó là thiết lập mà là ENGINE, tôi không biết làm thế nào để có được bởi nó .

cuộc nói chuyện của tôi với Heroku để đảm bảo nó biết về postgres

$ heroku addons:add heroku-postgresql:dev 
Adding heroku-postgresql:dev on morning-crag-1585... done, v24 (free) 
Attached as HEROKU_POSTGRESQL_OLIVE_URL 
Database has been created and is available 
! This database is empty. If upgrading, you can transfer 
! data from another database with pgbackups:restore. 
. 
Use `heroku addons:docs heroku-postgresql:dev` to view documentation. 
$ heroku pg:wait 
$ heroku config | grep HEROKU_POSTGRESQL 
HEROKU_POSTGRESQL_OLIVE_URL: postgres://<blah-blah-blah>@ec2-<ip-address>.compute-1.amazonaws.com:5432/<blah-blah> 
$ heroku pg:promote HEROKU_POSTGRESQL_OLIVE_URL 
Promoting HEROKU_POSTGRESQL_OLIVE_URL to DATABASE_URL... done 

requirements.txt của tôi:

Django==1.4.2 
wsgiref==0.1.2 
dj-database-url==0.2.1 

Một đoạn từ settings.py của tôi:

print "Got here before!\n" 
try: 
    import dj_database_url 
    DATABASES = { 'default': dj_database_url.config(default='postgres://localhost') } 
except: 
    print "Unexpected error:", sys.exc_info() 

print DATABASES 

Khi Tôi đẩy đến heroku, tôi nhận được điều này từ heroku logs:

heroku[slugc]: Slug compilation finished 
heroku[web.1]: Starting process with command `python ./manage.py runserver 0.0.0.0:30550 --noreload` 
app[web.1]: Got here before! 
app[web.1]: 
app[web.1]: {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': '<blah blah>', 'HOST': 'ec2-<iip-address>.compute-1.amazonaws.com', 'USER': '<blah blah>', 'PASSWORD': '<blah>', 'PORT': 5432}} 
app[web.1]: 
app[web.1]: Validating models... 
app[web.1]: Traceback (most recent call last): 
app[web.1]: File "./manage.py", line 10, in <module> 
app[web.1]:  execute_from_command_line(sys.argv) 
app[web.1]:  utility.execute() 
app[web.1]:  self.execute(*args, **options.__dict__) 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv 
app[web.1]:  self.fetch_command(subcommand).run_from_argv(self.argv) 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute 
app[web.1]:  self.inner_run(*args, **options) 
app[web.1]:  self.validate(display_num_errors=True) 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 91, in inner_run 
app[web.1]:  num_errors = get_validation_errors(s, app) 
app[web.1]:  self.run(*args, **options) 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/utils.py", line 92, in __getitem__ 
app[web.1]:  output = self.handle(*args, **options) 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/validation.py", line 23, in get_validation_errors 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module 
app[web.1]:  from django.db import models, connection 
app[web.1]:  return import_module('.base', backend_name) 
app[web.1]:  __import__(name) 
app[web.1]: ImportError: No module named psycopg2.extensions 
app[web.1]:  return getattr(connections[DEFAULT_DB_ALIAS], item) 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/creation.py", line 1, in <module> 
app[web.1]:  backend = load_backend(db['ENGINE']) 
app[web.1]:  import psycopg2.extensions 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/__init__.py", line 40, in <module> 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 69, in handle 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 80, in run 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/utils.py", line 24, in load_backend 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/core/management/base.py", line 266, in validate 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/__init__.py", line 34, in __getattr__ 
app[web.1]:  backend = load_backend(connection.settings_dict['ENGINE']) 
app[web.1]:  from django.db.backends.postgresql_psycopg2.creation import DatabaseCreation 
app[web.1]: File "/app/.heroku/venv/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 13, in <module> 
heroku[web.1]: Process exited with status 1 
heroku[web.1]: State changed from starting to crashed 

Trả lời

12

Bạn cần thêm cài đặt psycopg2 vào tệp requirements.txt của mình. Nó là bộ điều hợp cơ sở dữ liệu - cách giao diện python với PostgreSQL bạn thực sự không cần phải cài đặt vì heroku làm.

Chỉ cần thêm dòng psycopg2==2.4.4 vào tệp requirements.txt của bạn.

Tự thêm cơ sở dữ liệu bổ sung, bằng cách này, không cần thiết. dj-database-url tự động xử lý nó. Xem heroku docs để biết hướng dẫn từng bước.

+0

+1. https://devcenter.heroku.com/articles/django#prerequisites – danihp

+0

D'oh! Cảm ơn! Điều đó đã làm điều đó, và đọc kỹ hơn về các tài liệu (tôi đã đọc chúng nhiều lần, nhưng bằng cách nào đó đã bỏ lỡ một dòng) –

Các vấn đề liên quan