variable instalar español entorno descargar configurar python django heroku django-settings

instalar - python 2.7 13



Configuración incorrecta: debe definir la variable de entorno DJANGO_SETTINGS_MODULE o llamar a settings.configure() antes de acceder a la configuración (4)

Estaba tratando de configurar mi proyecto django para implementarlo en heroku. Recibo el siguiente error y realmente no sé cómo solucionarlo.

Aquí está el rastreo completo y el error:

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.

Aquí está mi archivo 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())

Y en caso de que fuera relevante, mi archivo 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)

¿Alguien puede entender el problema aquí? Y si es así, ¿puedes ser tan amable de explicar lo que está mal? ¡Gracias!


Cree un archivo .env que contendrá sus credenciales en la raíz de su proyecto y déjelo fuera de las versiones:

$ echo ".env" >> .gitignore

En el archivo .env, agregue las variables (adáptelas según su instalación):

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

Para usarlos, coloque esto encima de su archivo de configuración de production.py:

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

Publícalo en Heroku usando esta gema: http://github.com/ddollar/heroku-config.git

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

De esta manera, evita cambiar los archivos virtualenv.

* Basado en este tutorial


De la guía definitiva de Django: Desarrollo web bien hecho :

Si ha usado Python anteriormente, puede que se pregunte por qué estamos ejecutando python manage.py shell lugar de solo python . Ambos comandos iniciarán el intérprete interactivo, pero el comando de manage.py shell tiene una diferencia clave: antes de iniciar el intérprete, le dice a Django qué archivo de configuración debe usar.

Caso de uso: muchas partes de Django, incluido el sistema de plantillas, dependen de su configuración, y no podrá usarlas a menos que el marco sepa qué configuraciones usar.

Si tienes curiosidad, así es como funciona detrás de escena. Django busca una variable de entorno llamada DJANGO_SETTINGS_MODULE , que debe establecerse en la ruta de importación de settings.py. Por ejemplo, DJANGO_SETTINGS_MODULE podría establecerse en ''mysite.settings'' , suponiendo que mysite esté en su ruta de Python.

Cuando ejecuta python manage.py shell , el comando se encarga de configurar DJANGO_SETTINGS_MODULE por usted. **


Django necesita la configuración específica de su aplicación. Ya que ya está dentro de su manage.py solo. La solución más rápida pero quizás temporal es:

python manage.py shell


Pensé que DJANGO_SETTINGS_MODULE tenía que configurarse de alguna manera, así que miré la documentation (enlace actualizado) y encontré:

export DJANGO_SETTINGS_MODULE=mysite.settings

Aunque eso no es suficiente si está ejecutando un servidor en heroku, también debe especificarlo allí. Me gusta esto:

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

En mi caso específico, ejecuté estos dos y todo salió bien:

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

Editar

También me gustaría señalar que debe volver a hacer esto cada vez que cierre o reinicie su entorno virtual. En cambio, debe automatizar el proceso yendo a venv / bin / enable y agregando la línea: set DJANGO_SETTINGS_MODULE=mysite.settings en la parte inferior del código. A partir de ahora, cada vez que active el entorno virtual, utilizará la configuración de esa aplicación.