अनुचित तरीके से कॉन्फ़िगर किया गया: आपको सेटिंग तक पहुँचने से पहले या तो पर्यावरण चर को परिभाषित करना होगा DJANGO_SETTINGS_MODULE या कॉल सेटिंग .configure ()


88

मैं उसे करने के लिए तैनात करने के लिए अपने django परियोजना को कॉन्फ़िगर करने की कोशिश कर रहा था। मुझे निम्न त्रुटि मिल रही है और मुझे नहीं पता कि इसे कैसे ठीक किया जाए।

यहाँ पूर्ण ट्रेसबैक और त्रुटि है:

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)

क्या कोई इस मुद्दे को समझ सकता है? और यदि हां, तो क्या आप इस तरह की व्याख्या कर सकते हैं कि क्या गलत है? धन्यवाद!

जवाबों:


86

मुझे लगा कि DJANGO_SETTINGS_MODULE को कुछ रास्ता तय करना था, इसलिए मैंने प्रलेखन (लिंक अपडेट किया गया) को देखा और पाया:

export DJANGO_SETTINGS_MODULE=mysite.settings

यद्यपि यह पर्याप्त नहीं है यदि आप हरोकू पर एक सर्वर चला रहे हैं, तो आपको इसे वहां भी निर्दिष्ट करने की आवश्यकता है। ऐशे ही:

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

संपादित करें

मैं यह भी बताना चाहूंगा कि आपको हर बार अपने वर्चुअल वातावरण को बंद करने या फिर से शुरू करने के लिए यह करना होगा। इसके बजाय, आपको वीवीएन / बिन / सक्रिय होकर और लाइन को जोड़कर प्रक्रिया को स्वचालित करना चाहिए: set DJANGO_SETTINGS_MODULE=mysite.settingsकोड के नीचे। अब से हर बार जब आप वर्चुअल वातावरण को सक्रिय करते हैं, तो आप उस ऐप की सेटिंग का उपयोग करेंगे।


तो os.environ.setdefault("DJANGO_SETTINGS_MODULE", "nirla.settings")नजरअंदाज कर दिया जाता है?
मतेज जे

67

से Django निश्चित गाइड: वेब विकास का अधिकार हो गया :

यदि आपने पहले पायथन का उपयोग किया है, तो आप सोच रहे होंगे कि हम python manage.py shellबस के बजाय क्यों भाग रहे हैं python। दोनों कमांड इंटरएक्टिव इंटरप्रेटर शुरू करेंगे, लेकिन manage.py shellकमांड में एक महत्वपूर्ण अंतर है: इंटरप्रेटर शुरू करने से पहले, यह Django को बताता है कि किस फाइल का उपयोग करना है।

केस का उपयोग करें: टेम्प्लेट सिस्टम सहित Django के कई हिस्से, आपकी सेटिंग्स पर निर्भर करते हैं, और जब तक कि फ्रेमवर्क का उपयोग करने के लिए पता नहीं है, तब तक आप उनका उपयोग नहीं कर पाएंगे।

यदि आप उत्सुक हैं, तो यहां बताया गया है कि यह पर्दे के पीछे कैसे काम करता है। Django एक पर्यावरण चर नाम की तलाश करता है DJANGO_SETTINGS_MODULE, जिसे आपके सेटिंग्स के आयात पथ पर सेट किया जाना चाहिए। उदाहरण के लिए, DJANGO_SETTINGS_MODULEहो सकता है 'mysite.settings'कि मान लिया जाए कि माइसाइट आपके पाइथन मार्ग पर है।

जब आप चलते हैं python manage.py shell, तो कमांड DJANGO_SETTINGS_MODULEआपके लिए सेटिंग का ध्यान रखती है । **


2
उसके लिए धन्यवाद। हालांकि django शेल ने एक ही त्रुटि फेंक दी, मैंने अंततः उसे हल कर दिया। मैं एक विशेष मामले में हूं, जिसमें मेरे पास settings.pyमेरे कोड बेस में एक फ़ाइल / मॉड्यूल नहीं है , लेकिन एक settingsपैकेज / फ़ोल्डर है। इस पैकेज में __init__.pyसभी पारंपरिक सामानों के साथ एक फाइल है settings.py, और अन्य स्थानीय सेटिंग्स फाइलें, जो आयातित init में हैं । इसलिए मुझे निम्नानुसार कॉन्फ़िगर करना था:export DJANGO_SETTINGS_MODULE=myappfolder.settings.__init__
फेड ज़ी

धन्यवाद, आपकी टिप्पणी प्रकाशित कर रही है। मैं Django में एक ऐप विकसित कर रहा हूं और मैंने एक एक्सेल शीट से मॉडल में डेटा अपलोड करने के लिए एक .py स्क्रिप्ट विकसित की है। अपनी सेटिंग्स की शुरुआत में मैंने आपके द्वारा सुझाई गई दो पंक्तियों को जोड़ा, जो कि "django.conf आयात सेटिंग्स से", "सेटिंग्स.configure ()" है .. लेकिन जैसे ही मैं इसे चलाता हूं, मेरा कंसोल "django.core" वापस आ जाता है। अपवाद .AppRegistryNotReady: ऐप्स अभी तक लोड नहीं किए गए हैं ”, और मुझे समझ नहीं आ रहा है कि क्यों। यहाँ मेरी स्क्रिप्ट stackoverflow.com/questions/58305225/…
Tms91

40

Django को आपकी एप्लिकेशन-विशिष्ट सेटिंग्स की आवश्यकता होती है। चूंकि यह पहले से ही आपके अंदर है manage.py, बस उसी का उपयोग करें। तेज़, लेकिन शायद अस्थायी, समाधान है:

python manage.py shell

यह वही है जो मुझे चाहिए था जब मैं Django 2.0 ट्यूटोरियल - भाग 5 - स्वचालित परीक्षण के माध्यम से जा रहा था । पहले, मैंने pythonअकेले टाइप करके अपने वातावरण में पायथन इंटरेक्टिव मोड में प्रवेश किया । यह टाइप करने के बाद AppRegistryNotReady अपवाद को जन्म देगा from polls.models import Question
२०:३yc बजे ०१

9

मेरे मामले में यह 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

उनका उपयोग करने के लिए, इसे अपनी प्रोडक्शन थ्रू सेटिंग्स फ़ाइल में ऊपर रखें:

import os

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

इस मणि का उपयोग कर इसे हेरोकू पर प्रकाशित करें: http://github.com/ddollar/heroku-config.git

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

इस तरह आप virtualenv फ़ाइलों को बदलने से बचते हैं।

* इस ट्यूटोरियल के आधार पर


1

यदि आप स्थानीय सर्वर का उपयोग कर रहे हैं, तो Django शेल का उपयोग करके चलाएं python manage.py shell। यह आपको Django के अजगर के माहौल में ले जाएगा और आप जाने के लिए अच्छे हैं।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.