[python] 부적절한 구성 : 설정에 액세스하기 전에 환경 변수 DJANGO_SETTINGS_MODULE을 정의하거나 settings.configure ()를 호출해야합니다.
내 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)
누구든지 여기서 문제를 이해할 수 있습니까? 그렇다면, 무엇이 잘못되었는지 설명 할 수있을 정도로 친절 할 수 있습니까? 감사합니다!
답변
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
로 이동하여 코드 하단에 다음 줄을 추가하여 프로세스를 자동화해야 합니다. 이제부터는 가상 환경을 활성화 할 때마다 해당 앱의 설정을 사용하게됩니다.
답변
에서 마우스 오른쪽 완료 웹 개발 : 확실한 장고에 가이드 :
이전에 파이썬을 사용한 적이 있다면, 당신은 우리가 실행하는 이유 궁금 할
python manage.py shell
대신에 단지python
. 두 명령 모두 대화 형 인터프리터를 시작하지만이manage.py shell
명령에는 한 가지 중요한 차이점이 있습니다. 인터프리터를 시작하기 전에 사용할 설정 파일을 Django에 알려줍니다.
사용 사례 : 템플릿 시스템을 포함하여 Django의 많은 부분은 사용자의 설정에 의존하며 프레임 워크가 사용할 설정을 알지 못하면 사용할 수 없습니다.
궁금한 점이 있다면 다음과 같이 배후에서 작동합니다. Django는
DJANGO_SETTINGS_MODULE
settings.py의 가져 오기 경로로 설정되어야하는 라는 환경 변수를 찾습니다 . 예를 들어 mysite가 Python 경로에 있다고 가정하면DJANGO_SETTINGS_MODULE
이로 설정 될 수 있습니다'mysite.settings'
.을 실행
python manage.py shell
하면 명령이 자동으로 설정DJANGO_SETTINGS_MODULE
을 처리합니다. **
답변
Django는 애플리케이션 별 설정이 필요합니다. 이미 내부에 있으므로 manage.py
사용 하십시오 . 더 빠르지 만 일시적인 해결책은 다음과 같습니다.
python manage.py shell
답변
제 경우 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
답변
크리에이트 은 .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 파일을 변경하지 않아도됩니다.
*이 튜토리얼을 기반으로 함
답변
로컬 서버를 사용하는 경우 python manage.py shell
. Django python 환경으로 이동하면 좋습니다.
답변
Python 경로가 프로젝트 디렉토리에 올바르게 설정되어 있는지 확인하십시오.