부적절한 구성 : 설정에 액세스하기 전에 환경 변수 DJANGO_SETTINGS_MODULE을 정의하거나 settings.configure ()를 호출해야합니다.


83

내 django 프로젝트를 heroku에 배포하도록 구성하려고했습니다. 다음과 같은 오류가 발생하는데 실제로 해결 방법을 모르겠습니다.

다음은 전체 역 추적 및 오류입니다.

22:46:15 web.1  | Traceback (most recent call last):
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/gunicorn/arbiter.py", line 495, in spawn_worker
22:46:15 web.1  |     worker.init_process()
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/gunicorn/workers/base.py", line 106, in init_process
22:46:15 web.1  |     self.wsgi = self.app.wsgi()
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/gunicorn/app/base.py", line 114, in wsgi
22:46:15 web.1  |     self.callable = self.load()
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 62, in load
22:46:15 web.1  |     return self.load_wsgiapp()
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 49, in load_wsgiapp
22:46:15 web.1  |     return util.import_app(self.app_uri)
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/gunicorn/util.py", line 354, in import_app
22:46:15 web.1  |     __import__(module)
22:46:15 web.1  |   File "/Users/nir/nirla/nirla/wsgi.py", line 12, in <module>
22:46:15 web.1  |     from dj_static import Cling
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/dj_static.py", line 7, in <module>
22:46:15 web.1  |     from django.contrib.staticfiles.handlers import StaticFilesHandler as DebugHandler
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 8, in <module>
22:46:15 web.1  |     from django.contrib.staticfiles.views import serve
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/contrib/staticfiles/views.py", line 13, in <module>
22:46:15 web.1  |     from django.views import static
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/views/static.py", line 96, in <module>
22:46:15 web.1  |     template_translatable = ugettext_noop("Index of %(directory)s")
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/utils/translation/__init__.py", line 65, in gettext_noop
22:46:15 web.1  |     return _trans.gettext_noop(message)
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/utils/translation/__init__.py", line 52, in __getattr__
22:46:15 web.1  |     if settings.USE_I18N:
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/conf/__init__.py", line 54, in __getattr__
22:46:15 web.1  |     self._setup(name)
22:46:15 web.1  |   File "/Users/nir/nirla/venv/lib/python2.7/site-packages/django/conf/__init__.py", line 47, in _setup
22:46:15 web.1  |     % (desc, ENVIRONMENT_VARIABLE))
22:46:15 web.1  | ImproperlyConfigured: Requested setting USE_I18N, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

다음은 내 wsgi.py 파일입니다.

import os
from django.core.wsgi import get_wsgi_application
from dj_static import Cling

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "nirla.settings") #nirla is the name of the project


application = Cling(get_wsgi_application())

그리고 관련이있는 경우 내 manage.py 파일 :

import os
import sys

    if __name__ == "__main__":
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "nirla.settings")

        from django.core.management import execute_from_command_line

        execute_from_command_line(sys.argv)

누구든지 여기서 문제를 이해할 수 있습니까? 그렇다면, 무엇이 잘못되었는지 설명 할 수있을 정도로 친절 할 수 있습니까? 감사합니다!

답변:


82

DJANGO_SETTINGS_MODULE 을 어떤 식 으로든 설정해야 한다고 생각 했기 때문에 문서 (링크 업데이트 됨)를보고 다음을 발견했습니다.

export DJANGO_SETTINGS_MODULE=mysite.settings

heroku에서 서버를 실행하는 경우 충분하지 않지만 거기에서도 지정해야합니다. 이렇게 :

heroku config:set DJANGO_SETTINGS_MODULE=mysite.settings --account <your account name> 

내 특정한 경우에는이 두 가지를 실행했고 모든 것이 해결되었습니다.

export DJANGO_SETTINGS_MODULE=nirla.settings
heroku config:set DJANGO_SETTINGS_MODULE=nirla.settings --account personal

편집하다

또한 가상 환경을 닫거나 다시 시작할 때마다이 작업을 다시 수행해야한다는 점을 지적하고 싶습니다. 대신 venv / bin / activate set DJANGO_SETTINGS_MODULE=mysite.settings로 이동하여 코드 하단에 다음 줄을 추가하여 프로세스를 자동화해야 합니다. 이제부터는 가상 환경을 활성화 할 때마다 해당 앱의 설정을 사용하게됩니다.


그래서 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "nirla.settings")무시됩니까?
Matej J

62

에서 마우스 오른쪽 완료 웹 개발 : 확실한 장고에 가이드 :

이전에 파이썬을 사용한 적이 있다면, 당신은 우리가 실행하는 이유 궁금 할 python manage.py shell대신에 단지 python. 두 명령 모두 대화 형 인터프리터를 시작하지만이 manage.py shell명령에는 한 가지 중요한 차이점이 있습니다. 인터프리터를 시작하기 전에 사용할 설정 파일을 Django에 알려줍니다.

사용 사례 : 템플릿 시스템을 포함하여 Django의 많은 부분은 사용자의 설정에 의존하며 프레임 워크가 사용할 설정을 알지 못하면 사용할 수 없습니다.

궁금한 점이 있다면 다음과 같이 배후에서 작동합니다. Django는 DJANGO_SETTINGS_MODULEsettings.py의 가져 오기 경로로 설정되어야하는 라는 환경 변수를 찾습니다 . 예를 들어 mysite가 Python 경로에 있다고 가정하면 DJANGO_SETTINGS_MODULE이로 설정 될 수 있습니다 'mysite.settings'.

을 실행 python manage.py shell하면 명령이 자동으로 설정 DJANGO_SETTINGS_MODULE을 처리합니다. **


2
감사합니다. 장고 셸에서 동일한 오류가 발생했지만 결국 해결했습니다. settings.py내 코드베이스에 파일 / 모듈이 없지만 settings패키지 / 폴더 가있는 특정 경우에 있습니다. 이 패키지에는 init 에서 가져온, 기타 로컬 설정 파일 __init__.py의 모든 기존 항목 이 포함 된 파일 이 포함되어 있습니다 . 그래서 다음과 같이 구성해야했습니다.settings.pyexport DJANGO_SETTINGS_MODULE=myappfolder.settings.__init__
Fed Zee

감사합니다. 귀하의 의견이 밝습니다. Django에서 앱을 개발 중이며 Excel 시트에서 모델로 데이터를 업로드하는 .py 스크립트를 개발했습니다. 내 settings.py 시작 부분에 "django.conf 가져 오기 설정에서", "settings.configure ()"라는 두 줄을 추가했습니다.하지만 실행하면 콘솔에서 "django.core. exceptions.AppRegistryNotReady : 앱이 아직로드되지 않았습니다.”라는 메시지가 표시되며 이유를 이해할 수 없습니다. 여기 내 스크립트입니다 stackoverflow.com/questions/58305225/...은
Tms91

38

Django는 애플리케이션 별 설정이 필요합니다. 이미 내부에 있으므로 manage.py사용 하십시오 . 더 빠르지 만 일시적인 해결책은 다음과 같습니다.

python manage.py shell

이것은 Django 2.0 Tutorial-Part 5-Automated testing 을 진행할 때 정확히 필요한 것 입니다. 이전에는 python혼자 입력하여 내 환경에서 Python 대화 형 모드로 들어갔습니다 . 이로 인해을 입력 한 후 AppRegistryNotReady 예외가 발생 from polls.models import Question합니다.
datalifenyc

6

제 경우 call_command에는 문제를 일으킨 모듈을 사용했습니다 .
추가 set DJANGO_SETTINGS_MODULE=mysite.settings했지만 작동하지 않았습니다.

마침내 찾았습니다.

스크립트 맨 위에이 줄을 추가하면 순서가 중요합니다.

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

import django
django.setup()

from django.core.management import call_command

3

크리에이트 은 .env 프로젝트의 루트에 자격 증명을 잡고 버전의 그것을 떠나 파일 :

$ echo ".env" >> .gitignore

.env 파일에서 변수를 추가합니다 (설치에 따라 조정).

$ echo "DJANGO_SETTINGS_MODULE=myproject.settings.production"> .env
#50 caracter random key
$ echo "SECRET_KEY='####'">> .env

이를 사용하려면 production.py 설정 파일 위에 다음을 입력하십시오.

import os

env = os.environ.copy()
SECRET_KEY = env['SECRET_KEY']

이 gem을 사용하여 Heroku에 게시합니다 : http://github.com/ddollar/heroku-config.git

$ heroku plugins:install git://github.com/ddollar/heroku-config.git
$ heroku config:push

이렇게하면 virtualenv 파일을 변경하지 않아도됩니다.

*이 튜토리얼을 기반으로 함


0

로컬 서버를 사용하는 경우 python manage.py shell. Django python 환경으로 이동하면 좋습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.