varios proyectos proyecto ejemplos ejecutar php mysql laravel laravel-5 environment-variables

php - proyectos - laravel tags



Dos aplicaciones de Laravel en el mismo servidor que entran en conflicto entre sí (2)

Esto es más un comentario que una respuesta, pero aún no tengo suficientes representantes para comentar. Aunque tuve un problema similar y puedo ayudar.

Si estas dos aplicaciones comparten directorios, laravel usa el sistema de archivos en la memoria caché de forma predeterminada.

Si desea compartir una base de código con dos conexiones de bases de datos diferentes, use la base de datos para el almacenamiento en caché. Puede publicar la migración para crear la tabla de caché con el comando php artisan cache:table

Luego, simplemente ejecute php artisan migrate CACHE_DRIVER y cambie la línea CACHE_DRIVER en su archivo .env a ''database''

Tengo 2 aplicaciones Laravel ejecutándose en el mismo servidor. El servidor es Apache 2.4 y tengo vhosts configurados para servir cada aplicación en un dominio diferente.

La primera aplicación es una API y su archivo .env está configurado de esta manera:

APP_ENV=production APP_KEY=YYYYYYYYYYYYYYYYYY APP_DEBUG=false APP_LOG_LEVEL=debug APP_URL=https://notify.mysite.com APP_DOMAIN=notify.mysite.com DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=notify DB_USERNAME=YYYYYYYYYYYYYYYYYY DB_PASSWORD=YYYYYYYYYYYYYYYYYY BROADCAST_DRIVER=log CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync

La segunda aplicación es una interfaz de usuario que, entre otras cosas, utiliza la API de la primera aplicación. Su archivo .env está configurado de esta manera:

APP_ENV=local APP_KEY=XXXXXXXXXXXXXX APP_DEBUG=true APP_LOG_LEVEL=debug APP_URL=https://asapps.mysite.com APP_DOMAIN=asapps.mysite.com APP_VERSION=1 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=asapps DB_NOTIFY_DATABASE=notify DB_FLIGHT_DATABASE=flights DB_USERNAME=XXXXXXXXXXXXXX DB_PASSWORD=XXXXXXXXXXXXXX BROADCAST_DRIVER=log CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync

Puedo enviar mensajes a mi API desde mi editor Swagger, desde Postman y desde otros servidores, y todo funciona como se espera.

Mi segunda aplicación en sí misma también funciona como se esperaba.

Sin embargo, si mi segunda aplicación envía una solicitud a la API, la aplicación API arroja este error:

excepción ''PDOException'' con el mensaje ''SQLSTATE [42S02]: tabla base o vista no encontrada: 1146 Tabla'' asapps.preprocessor_config ''no existe'' en C: / notify / vendor / laravel / framework / src / Illuminate / Database / Connection .php: 332

¿WTH?

La base de datos para la API está configurada en DB_DATABASE = notificar y definitivamente usa correctamente esa conexión cuando envío mensajes de otros servidores. Entonces, ¿por qué diablos está tratando de usar la conexión de la base de datos de la segunda aplicación cuando llamo a la API desde esa aplicación? Es casi como si estuviese almacenando en caché la conexión DB e intentando seguir usando esa misma ... ¿Cómo puedo detener eso?

La tabla ''asapps.preprocessor_config'' no existe ''


Después de más excavaciones (leer googlear frenéticamente), encontré el problema y la solución aquí

En resumidas cuentas, cuando el sitio A acepta una solicitud, php carga sus variables .env para toda la longitud de la solicitud http. Durante esa solicitud, cuando el sitio A llama al sitio B, ya que están en el mismo servidor ejecutando el mismo php, php todavía está utilizando .env desde el sitio A y no carga por completo el archivo .env del sitio B.

La mejor explicación del autor:

El archivo .env con las variables se creó para que las personas no envíen sus credenciales a los repositorios de Github y a otros lugares donde puedan compartir el origen.

Ahora, al ser variables de entorno, se convierten en todo el sistema durante toda la duración de la solicitud http (en este caso, ejecución de scripts). El punto es que tienes un script de ejecución larga.

Para encontrar una solución definitiva, puede elegir una de las tres formas.

....

''namespace'' las variables ENV.