Ich habe versucht, mein Django-Projekt für die Bereitstellung auf Heroku zu konfigurieren. Ich erhalte den folgenden Fehler und weiß nicht wirklich, wie ich ihn beheben soll.
Hier ist der vollständige Traceback und Fehler:
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.
Hier ist meine wsgi.py- Datei:
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())
Und falls es relevant war, meine manage.py- Datei:
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)
Kann jemand das Problem hier zu verstehen scheinen? Und wenn ja, können Sie so freundlich sein, zu erklären, was falsch ist? Vielen Dank!
quelle
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "nirla.settings")
also ignoriert?Vom endgültigen Leitfaden zu Django: Webentwicklung richtig gemacht :
Anwendungsfall: Viele Teile von Django, einschließlich des Vorlagensystems, hängen von Ihren Einstellungen ab, und Sie können sie nur verwenden, wenn das Framework weiß, welche Einstellungen verwendet werden sollen.
quelle
settings.py
Datei / kein Modul in meiner Codebasis habe, sondern einsettings
Paket / einen Ordner. Dieses Paket enthält eine__init__.py
Datei mit allen herkömmlichen Inhalten dersettings.py
und anderer lokaler Einstellungsdateien, die in init importiert wurden . Also musste ich wie folgt konfigurieren:export DJANGO_SETTINGS_MODULE=myappfolder.settings.__init__
Django benötigt Ihre anwendungsspezifischen Einstellungen. Da es sich bereits in Ihrem befindet
manage.py
, verwenden Sie es einfach. Die schnellere, aber möglicherweise vorübergehende Lösung lautet:quelle
python
alleiniges Tippen aufgerufen. Dies würde nach der Eingabe zu einer AppRegistryNotReady-Ausnahme führenfrom polls.models import Question
.In meinem Fall war es die Verwendung des
call_command
Moduls, die ein Problem darstellte.Ich fügte hinzu,
set DJANGO_SETTINGS_MODULE=mysite.settings
aber es hat nicht funktioniert.Ich habe es endlich gefunden:
Fügen Sie diese Zeilen oben im Skript hinzu, und die Reihenfolge ist wichtig.
import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings") import django django.setup() from django.core.management import call_command
quelle
Erstellen Sie eine ENV- Datei, in der Ihre Anmeldeinformationen im Stammverzeichnis Ihres Projekts gespeichert sind, und lassen Sie die Versionsverwaltung aus:
$ echo ".env" >> .gitignore
Fügen Sie in der .env-Datei die Variablen hinzu (passen Sie sie entsprechend Ihrer Installation an):
$ echo "DJANGO_SETTINGS_MODULE=myproject.settings.production"> .env #50 caracter random key $ echo "SECRET_KEY='####'">> .env
Um sie zu verwenden, fügen Sie dies oben in Ihre Einstellungsdatei Production.py ein:
import os env = os.environ.copy() SECRET_KEY = env['SECRET_KEY']
Veröffentlichen Sie es in Heroku mit diesem Juwel: http://github.com/ddollar/heroku-config.git
Auf diese Weise vermeiden Sie das Ändern von virtualenv-Dateien.
* Basierend auf diesem Tutorial
quelle
Wenn Sie den lokalen Server verwenden, führen Sie die Django-Shell mit aus
python manage.py shell
. Sie gelangen in die Django-Python-Umgebung und können loslegen.quelle
Stellen Sie sicher, dass der Python-Pfad korrekt auf Ihr Projektverzeichnis eingestellt ist.
quelle