2014-02-13 1 views
2

Heroku에서 Django를 사용하면 dynos가 거의 즉시 중단됩니다. 로그 오류에서 "데이터베이스"가 정의되지 않았 음을 언급합니다. 로그는 다음과 같습니다.배포 직후 Heroku dynos가 충돌합니다. DATABASE undefined

2014-02-13T11:32:38.373434+00:00 app[web.1]: 2014-02-13 11:32:38 [7] [INFO] Worker exiting (pid: 7) 
2014-02-13T11:32:38.373434+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module 
2014-02-13T11:32:38.373434+00:00 app[web.1]: __import__(name) 
2014-02-13T11:32:38.373434+00:00 app[web.1]: NameError: name 'DATABASES' is not defined 
2014-02-13T11:32:38.373434+00:00 app[web.1]: DATABASES['default'] = dj_database_url.config() 
2014-02-13T11:32:38.569277+00:00 heroku[web.1]: State changed from starting to crashed 
2014-02-13T11:32:38.569974+00:00 heroku[web.1]: State changed from crashed to starting 
2014-02-13T11:32:38.505867+00:00 app[web.1]: 2014-02-13 11:32:38 [2] [INFO] Shutting down: Master 
2014-02-13T11:32:38.505867+00:00 app[web.1]: 2014-02-13 11:32:38 [2] [INFO] Reason: Worker failed to boot. 
2014-02-13T11:32:38.557996+00:00 heroku[web.1]: Process exited with status 3 
2014-02-13T11:32:39.808509+00:00 heroku[web.1]: Process exited with status 3 
2014-02-13T11:32:42.728831+00:00 heroku[web.1]: Starting process with command `gunicorn counter.wsgi` 
2014-02-13T11:32:43.803689+00:00 app[web.1]: 2014-02-13 11:32:43 [2] [INFO] Starting gunicorn 18.0 
2014-02-13T11:32:43.807267+00:00 app[web.1]: 2014-02-13 11:32:43 [2] [INFO] Listening at: http://0.0.0.0:44456 (2) 
2014-02-13T11:32:43.807741+00:00 app[web.1]: 2014-02-13 11:32:43 [2] [INFO] Using worker: sync 
2014-02-13T11:32:43.819443+00:00 app[web.1]: 2014-02-13 11:32:43 [7] [INFO] Booting worker with pid: 7 
2014-02-13T11:32:43.939156+00:00 app[web.1]: 2014-02-13 11:32:43 [7] [ERROR] Exception in worker process: 
2014-02-13T11:32:43.939156+00:00 app[web.1]: Traceback (most recent call last): 
2014-02-13T11:32:43.939156+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/arbiter.py", line 495, in spawn_worker 
2014-02-13T11:32:43.939156+00:00 app[web.1]: worker.init_process() 
2014-02-13T11:32:43.939156+00:00 app[web.1]: File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/base.py", line 106, in init_process 
... 
... 
... 

계속됩니다.

Heroku 설정 안내서의 지시에 따라 settings.py를 변경할 때와 관련이있을 수 있다고 생각합니다. 아래의 첨부 파일입니다 : dj_database_url가 제대로 가져 오지 않았기 때문에

import os 
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 

SECRET_KEY = 'c_ctc!-&!zyug%xh3&xi_v#1cs0xkr8!t_+y+f0ecc1)7dypz(' 
DEBUG = True 
TEMPLATE_DEBUG = True 
ALLOWED_HOSTS = ['*'] 
<span style="font-family:"Helvetica Neue","Helvetica","Arial",sans-serif;font-size:13px"></span> 
<span style="font-family:"Helvetica Neue","Helvetica","Arial",sans-serif;font-size:13px">INSTALLED_APPS = (</span> 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'users', 
) 

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
) 

ROOT_URLCONF = 'counter.urls' 
WSGI_APPLICATION = 'counter.wsgi.application' 

import dj_database_url 
DATABASES['default'] = dj_database_url.config() 

LANGUAGE_CODE = 'en-us' 
TIME_ZONE = 'UTC' 
USE_I18N = True 
USE_L10N = True 
USE_TZ = True 

STATIC_ROOT = 'staticfiles' 

STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'), 
) 

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') 

나는 그것이 dj_database_url.config 함께 할 수있는 뭔가가있을 수 있습니다 궁금해()가 제대로 호출되지? 또한 https://devcenter.heroku.com/articles/getting-started-with-django#django-settings

, 내가 $> Heroku가 실행 파이썬 manage.py의 runservers을 실행할 때, 나는 다음과 같은 얻을 :

여기
Running `python manage.py runservers` attached to terminal... up, run.2614 
Traceback (most recent call last): 
File "manage.py", line 10, in <module> 
execute_from_command_line(sys.argv) 
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line 
utility.execute() 
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute 
self.fetch_command(subcommand).run_from_argv(self.argv) 
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 261, in fetch_command 
commands = get_commands() 
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/management/__init__.py", line 107, in get_commands 
apps = settings.INSTALLED_APPS 
File "/app/.heroku/python/lib/python2.7/site-packages/django/conf/__init__.py", line 54, in __getattr__ 
self._setup(name) 
File "/app/.heroku/python/lib/python2.7/site-packages/django/conf/__init__.py", line 49, in _setup 
self._wrapped = Settings(settings_module) 
File "/app/.heroku/python/lib/python2.7/site-packages/django/conf/__init__.py", line 128, in __init__ 
mod = importlib.import_module(self.SETTINGS_MODULE) 
File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module 
__import__(name) 
File "/app/counter/settings.py", line 59, in <module> 
DATABASES['default'] = dj_database_url.config() 
NameError: name 'DATABASES' is not defined 

답변

2

당신이 postgresql 데이터베이스 dj_database_url.config 사용하는 방법입니다 settings.py 여기 지침에 따라 편집 한 . 다른 엔진에도 동일하게 적용됩니다.

DATABASES = {} 
DATABASES['default'] = dj_database_url.config(default='postgres:// 
                 user:[email protected]/db') 
DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2' 

사전에 DATABASES 사전을 작성하지 않으 셨습니다. 다음과 같이

+1

데이터베이스 URL 환경 변수의 이름이 'DATABASE_URL'이 아닌 경우 (Heroku에서는 그렇지 않을 것입니다),'dj_database_url.config()'에 기본값을 지정할 필요가 없습니다. 'DATABASE_URL' env var. dj_database_url은 postgres DB를 사용하고 psycopg2를 사용하고 있음을 자동으로 감지하므로'DATABASES [ 'default'] [ 'ENGINE']'명시 적으로 정의 할 필요가 없습니다. 출처 : [dj-database-url github repo] (https://github.com/kennethreitz/dj-database-url/blob/master/dj_database_url.py) –

2

나는 단순히 DATABASES 사전을 정의하는 것입니다 : 당신이 만든

# settings.py 
import dj_database_url 
DATABASES = {'default': dj_database_url.config()} 

유일한 실수는 사전을 만들기 전에 사전의 키에 값을 할당하려고했다. 그렇지 않으면, 그것은 모두 좋아 보인다!

+1

후속 조치와 마찬가지로 혼란은 아마도 Heroku 문서는 [Django docs] (https://docs.djangoproject.com/ko/1.6/ref/settings/#std:setting-DATABASES)에 설명 된대로 기본값에서 수정되지 않은'settings.py' 파일을 가지고 있다고 가정합니다.), 여기서'DATABASES'는 빈 사전입니다. 그러나 이것을 제거하거나 겹쳐 쓰면'default' 키에 무언가를 할당하려고해도 작동하지 않습니다. –