deploy - django aws database
Configuración de Django en AWS Elastic Beanstalk: WSGIPath no encontrado (5)
Hace varios días que intenté configurar Django en Elastic Beanstalk de Amazon Web Services. Creo que el problema que estoy golpeando es este:
ERROR - Your WSGIPath refers to a file that does not exist.
Seguí el tutorial here y todo va bien hasta el final del Paso 6, pero no puedo ver nada más que la página genérica Elastic Beanstalk del Paso 5, n. ° 2. Cuando corro
./manage.py runserver
en mi máquina local, todo funciona como debería, pero no puedo implementar esa página. Primero probé con un sitio pequeño de Django que escribí yo mismo. No funcionó, así que borré todo lo que había hecho y lo intenté nuevamente, eso no funcionó, así que borré todo eso y lo intenté de nuevo con una nueva instalación de django. Lo intenté un montón de veces jugando con cosas pequeñas, pero creo que me estoy perdiendo algo importante.
Agregué un archivo python.config como se describe en este tutorial .
Aquí está mi estructura de archivos:
-.git/
-.mysite/
-myapp/
-__init__.py
-models.py
-tests.py
-views.py
-mysite/
-__init__.py
-settings.py
-urls.py
-wsgi.py
-.ebextensions/
-python.config
-manage.py
-mysite.db
-requirements.txt
Desde mi settings.py:
DATABASES = {
''default'': {
''ENGINE'': ''django.db.backends.sqlite3'',
''NAME'': ''mysite.db'',
''USER'': '''',
''PASSWORD'': '''',
''HOST'': '''',
''PORT'': '''',
}
}
Aquí está python.config:
container_commands: 01_syncdb:
command: "django-admin.py syncdb --noinput"
leader_only: true
option_settings:
- namespace: aws:elasticbeanstalk:container:python
option_name: WSGIPath
value: mysite/wsgi.py
- option_name: DJANGO_SETTINGS_MODULE
value: mysite.settings
- option_name: AWS_SECRET_KEY
value: <This is my secret key>
- option_name: AWS_ACCESS_KEY_ID
value: <This is my access key>
¿Hay algún otro lugar donde necesite definir mi WSGIPath? ¿Hay alguna forma de hacerlo a través de la consola de AWS? ¿Debería omitir EB por completo y usar EC2 directamente?
De here
El directorio ".ebextensions" debe estar en el directorio de nivel raíz de su aplicación, pero a partir del resultado del registro, el directorio está en el directorio "mysite / .ebextensions". Entonces, por ejemplo, después de seguir el tutorial de django en los documentos cuando ejecuta "git aws.push", su directorio raíz sería así:
.
├── .ebextensions
│ └── python.config
├── .elasticbeanstalk
│ ├── config
├── .git
├── .gitignore
├── manage.py
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── requirements.txt
En lugar de esto:
.
└── mysite
├── .ebextensions
├── .elasticbeanstalk
├── .git
├── .gitignore
├── manage.py
├── mysite
└── requirements.txt
Encuentra .elasticbeanstalk/optionsettings.your-app-name
en el directorio raíz de tu aplicación. Busque WSGIPath
y asegúrese de que sea la ruta que desea. Parece que su valor predeterminado es application.py
.
Ok, esto es lo que funcionó para mí después de probar un millón de cosas. eb update
ejecutar eb update
para actualizar el entorno.
Así que asegúrese de que .elasticbeanstalk/optionsettings.whatever-env
tenga configurado WSGIPath como lo desee y asegúrese de que .ebextensions/whatever.config
tenga esto:
option_settings:
- namespace: aws:elasticbeanstalk:container:python
option_name: WSGIPath
value: whatever/wsgi.py
Luego ejecuta eb update
y debería funcionar. Recuerde que debe establecer el alias para asegurarse de que su comando eb
realmente funcione. Por ejemplo:
alias eb="python2.7 ../AWS-ElasticBeanstalk-CLI-2.6.3/eb/linux/python2.7/eb"
Tuve el mismo problema ( "Tu WSGIPath se refiere a un archivo que no existe" ) y finalmente encontré una solución:
- El problema: estaba descargando el paquete del proyecto directamente desde GitHub ("Descargar Zip"), que tal vez tenía una estructura inadecuada.
- La solución: comprime correctamente los archivos, sin la carpeta principal, usando el comando Comprimir. (cf http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.deployment.source.html ).
Nota: Al principio, estaba buscando en la dirección incorrecta, porque EB también mostraba este mensaje: Se produjo un error durante la compilación: Falló el comando 01_migrar. . Así que pensé que los archivos, incluido el * .config, estaban ubicados correctamente.
Tuve el mismo problema después de seguir los documentos de AWS al punto. Lo que hice para evitarlo fue inicializar una aplicación a través de la CLI de EB paso a paso, sin usar el comando instruido por los AWS (~ / ebdjango $ eb init -p python2.7 django-tutorial) y crear un entorno paso a paso también. Los pasos que tomé en EB CLI son los siguientes:
- Inicializar la aplicación
-
eb init
- Seleccione una región predeterminada
- Ingrese el nombre de la aplicación (valor predeterminado utilizado al presionar enter)
- Confirmado que estoy usando Python
- Versión de Python seleccionada compatible con mi entorno local
- Configurar SSH
-
- Crear entorno
-
eb create
- Ingrese el nombre del entorno (valor predeterminado utilizado al presionar enter)
- Ingrese el prefijo DNS CNAME (predeterminado utilizado al presionar enter)
- Seleccione un tipo de equilibrador de carga (seleccioné el clásico al ingresar 1)
-
Después de crear Environment, utilizo eb config
para abrir el archivo de configuración de EB y confirmar que la ruta a mi WSGI es la que debería ser:
aws:elasticbeanstalk:container:python:
NumProcesses: ''1''
NumThreads: ''15''
StaticFiles: /static/=static/
WSGIPath: path/to/wsgi.py
Si se realizan cambios, asegúrese de guardar el archivo y confirmar que todo esté al cuadrado ingresando eb open
en su terminal para abrir una ventana del navegador utilizando el nombre de dominio especificado en los pasos anteriores.