Laravel 5.2 no lee el archivo env

110

Después de actualizar a Laravel 5.2, no .envse lee ninguno de mis valores de archivo. Seguí las instrucciones de actualización ; ninguno de mis archivos de configuración fue cambiado excepto auth.php. Todos funcionaban bien en la versión anterior, 5.1.19

.env contiene valores como

DB_DATABASE=mydb
DB_USERNAME=myuser

config/database.php contiene

'mysql' => [
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
]

Me sale este error:

PDOException: SQLSTATE[HY000] [1045] Access denied for user 'forge'@'localhost' (using password: NO)

Claramente no tirando de mi configuración env. Esto está afectando a todos y cada uno de mis archivos de configuración, incluidos los de terceros, como bugsnag.

También lo intenté

php artisan config:clear
php artisan cache:clear

Actualizar

Molesto php artisan tinker

>>> env('DB_DATABASE')
=> null
>>> getenv('DB_DATABASE')
=> false
>>> config('database.connections.mysql.database')
=> "forge"
>>> dd($_ENV)
[]

Intenté instalar una copia nueva de Laravel 5.2. Básicamente, solo copié en mi appcarpeta; no se incluyen paquetes de compositor adicionales. Sigo teniendo el mismo problema. Tengo otros proyectos de Laravel 5.2 en el mismo servidor que funcionan bien.

andrewtweber
fuente
1
¿Está seguro de que el archivo .env se llama solo .env? ¿No es .env.example?
James Elliott
Andrew, ¿estás editando el archivo .env mediante la interfaz de forge o subiéndolo?
Mark Davidson
@JamesElliott sí lo es.env
andrewtweber
1
¿O lo está ejecutando localmente? Si está ejecutando bajo servicio artesanal, debe reiniciarlo en caso de que ese sea el caso.
Mark Davidson
@MarkDavidson lo edita a través de vi en la línea de comando, y no, está en un servidor completo
andrewtweber

Respuestas:

91

De las notas de actualización oficiales de Laravel 5.2:

Si está utilizando el config:cachecomando durante la implementación, debe asegurarse de que solo está llamando a la envfunción desde sus archivos de configuración y no desde cualquier otro lugar de su aplicación.

Si llama envdesde su aplicación, se recomienda encarecidamente que agregue los valores de configuración adecuados a sus archivos de configuración y llame envdesde esa ubicación, lo que le permitirá convertir sus envllamadas en configllamadas.

Referencia: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0

Gaurav Gupta
fuente
36
php artisan config:cachelo resolvió para mí, nada más había ayudado. Ni siquiera php artisan config:clear- ¡gracias!
Kair
36
Laravel 5.3 php artisan config:cleares lo único que funcionó para mí
Peon
9
Laravel 5.4 - implementado en un VPS: php artisan config:clearfuncionó para mí. No hice config: cache antes, así que me pareció un poco extraño tener que borrar el caché.
Antonio
asegúrese de estar editando en .envlugar de .env.examplearchivo
Connor Leech
84

Si alguna de sus .envvariables contiene espacios en blanco, asegúrese de incluirlas entre comillas dobles. Por ejemplo:

SITE_NAME="My website"

No olvide borrar su caché antes de realizar la prueba:

php artisan config:cache
php artisan config:clear
benjolly1989
fuente
Sí, está funcionando. Después de cambiar cualquier valor en el .envarchivo, ejecute el php artisan config:cache & php artisan config:clearcomando. Funcionará.
Chandan Sharma
41

Guau. Caramba. Es porque tenía un valor env con un espacio en él, no entre comillas

Esta

SITE_NAME=My website

Cambiado a esto

SITE_NAME="My website"

Arreglado. Creo que esto tuvo que ver con Laravel 5.2 ahora actualizando vlucas / phpdotenv de 1.1.1 a 2.1.0

andrewtweber
fuente
Lo mismo creo: parece que los espacios causan problemas en .envmenos de 5.2, mientras que en 5.1 no.
thomthom
5
Y este es uno de mis (muchos) problemas con Laravel: tiene el hábito de ignorar y aceptar a veces silenciosamente una variedad de configuraciones y / u otros tipos de errores, sin indicios de que algo haya salido mal. Dado, esto puede ser una "característica" de phpdotenv, pero Laravel aún sabe que hay un .envarchivo que debe incluirse y que no tuvo éxito, pero no se molesta en decírselo a nadie.
dKen
2
Ya he perdido horas en algo tan tonto. ¡Gracias por evitar que desperdicie más!
Jenski
29

Para mí ha funcionado esto en este orden:

php artisan config:cache
php artisan config:clear
php artisan cache:clear

Y he probado todos los descansos sin suerte.

TrOnNe
fuente
2
Este pedido resolvió mi problema después de unas horas de depuración.
Minion
Salvó mi vida. Tks. Pero no entendí por qué.
Mateus Galasso
esta orden me salvó. Gracias
Asad ullah
Gracias amable extraño de Internet, ¡esto lo hizo!
Eduardo
Si recibieras $ 1 cada vez que llego a esta respuesta, ya serías rico. ¡Gracias!
Altin
25

Tuve un problema similar en mi config/services.phpy lo resolví usando los comandos config cleary optimize:

php artisan config:clear
php artisan optimize
Deric Lima
fuente
24

Para mí funcionó lo siguiente

- php artisan config:cache
- php artisan config:clear
- php artisan cache:clear
Beatusfk
fuente
17

ejecuta esto:

php artisan config:clear
php artisan cache:clear

luego
php artisan config:cache

Ganesh K
fuente
11

Tuve el mismo problema en el entorno local, lo resolví

  1. php artisan config: claro
  2. php artisan config: caché
  3. y luego cancelar el comando php artisan serve y reiniciar nuevamente.
jay_mziray
fuente
11

Puede resolver el problema con la siguiente recomendación

Recomendación 1:

Debe usar el archivo .env a través de los archivos de configuración, lo que significa que debe leer el archivo .env de los archivos de configuración (como /config/app.php o /config/database.php), luego puede usar la configuración archivos desde cualquier ubicación de su proyecto.

Recomendación 2: establezca su valor env entre comillas dobles

 GOOGLE_CLIENT_ID="887557629-9h6n4ne.apps.googleusercontent.com"
 GOOGLE_CLIENT_SECRET="YT2ev2SpJt_Pa3dit60iFJ"
 GOOGLE_MAP="AIzaSyCK6RWwql0DucT7Sl43w9ma-k8qU"

Recomendación 3: Mantenga la siguiente secuencia de comandos después de cambiar cualquier configuración o valor env.

 composer dump-autoload
 composer dump-autoload -o

 php artisan clear-compiled
 php artisan optimize

 php artisan route:clear
 php artisan view:clear

 php artisan cache:clear
 php artisan config:cache
 php artisan config:clear

Recomendación 4: cuando la sintaxis1 no funciona, puede probar con otra sintaxis2

   $val1 = env('VARIABLE_NAME');     // syntax1
   $val2 = getenv('VARIABLE_NAME');  // syntax2
   echo 'systax1 value is:'.$val1.' & systax2 value is:'.$val2;

Recomendación 5: cuando su número de usuarios es alto / más , debe aumentar el tamaño de la memoria relacionada en la configuración del servidor .

Recomendación 6: establezca un valor probable predeterminado cuando lea la variable .env.

 $googleClinetId=env("GOOGLE_CLIENT_ID","889159-9h6n95f1e.apps.googleusercontent.com");
 $googleSecretId=env("GOOGLE_CLIENT_ID","YT2evBCt_Pa3dit60iFJ");
 $googleMap=env("GOOGLE_MAP","AIzaSyCK6RUl0T7Sl43w9ma-k8qU");
Majbah Habib
fuente
11

Cuando disparó el comando php artisan config:cache, eliminará todas las envvariables y env()dará valores nulos, intente ejecutar el siguiente comando y aumente allí, env()nuevamente comenzará a capturar todas las envvariables

php artisan config:clear
Shahrukh Anwar
fuente
Como magia, esto funcionó para mí, ¡gran respuesta!
David Partyka
9

Me perdí esto en las instrucciones de actualización:

Agregue una opción de configuración env a su app.phparchivo de configuración que se parece a lo siguiente: 'env' => env('APP_ENV', 'production')

Al agregar esta línea, el .envarchivo local se leyó correctamente.

dKen
fuente
1
Supongo que obtuve el mismo error, ya que mi aplicación era Laravel 4, luego actualicé a 5.0, luego a 5.1, etc. Probablemente no agregué este valor en mi app.php. Gracias por ahorrarme mucho tiempo. ¡Aquí hay un voto a favor!
Bruno P. Kinoshita
8

La simplicidad es el poder:

php artisan config:cache

Usted recibirá:

¡Se borró la caché de configuración!

¡Configuración almacenada en caché con éxito!

Adam Kozlowski
fuente
6

Lo mismo sucede cuando: el puerto está en su .env local

de nuevo las comillas dobles hacen el truco

APP_URL="http://localhost:8000"

y entonces

php artisan config:clear
Stavros
fuente
5

eliminar caché usando:

    php artisan config:clear
    php artisan config:cache
Diego Santa Cruz Mendezú
fuente
4

Además de lo que sugirió @andrewtweber, asegúrese de no tener espacios entre KEY = y el valor a menos que esté entre comillas

Archivo .env , por ejemplo:

...
SITE_NAME= My website
MAIL_PORT= 587
MAIL_FROM_NAME= websitename
...

a:

...
SITE_NAME="My website"
MAIL_PORT=587
MAIL_FROM_NAME=websitename
...
Waqleh
fuente
3

Me encontré con este mismo problema en mi local, y probé todas las respuestas aquí, pero fue en vano. Solo esto funcionó para mí, php artisan config:cleary restart server. ¡Funciona de maravilla!

Dexter Bengil
fuente
4
@RameshMhetre intente php artisan config:cache, php artisan config:clearentoncesphp artisan cache:clear
Dexter Bengil
2

Resolví este problema generando una nueva clave usando el comando: php artisan key:generate

Ángel Prieto
fuente
2

Si llamó a config: cache durante el desarrollo local, puede deshacer esto eliminando el archivo bootstrap / cache / config.php. y esto es trabajo para mí.

Payal Pandav
fuente
2

Si llamó a config: cache durante el desarrollo local, puede deshacer esto eliminando el archivo bootstrap / cache / config.php. y esto es trabajo para mí.

@Payal Pandav ha dado el comentario anterior.

Quiero contar una solución sencilla. Simplemente edite el archivo config.php en la carpeta bootstrap / cache /. Y cambia las credenciales. Esto funcionó para mí. No elimine este archivo, ya que puede contener otros datos cruciales en el entorno de producción.

Daya Satheesh
fuente
2

En mi caso, laravel 5.7 env('APP_URL')no funciona pero config('app.url')funciona. Si agrego una nueva variable a envy a la configuración, no funciona, pero después de php artisan config:cacheque comienza, funciona.

Kamil Kiełczewski
fuente
3
Si se encuentra en un entorno de desarrollo, no debe almacenar en caché su configuración y rutas. Para eliminar todo el caché puede utilizar:php artisan optimize:clear
Zohaib
@ZohaibHassan ¿Cómo desactivar la caché para configuraciones y rutas en el entorno de desarrollo?
Kamil Kiełczewski
1
El comando anterior desactivará 1. caché de rutas, 2 caché de configuración, 3. borrar vistas 4. borrar archivos optimizados 5. borrar caché si lo hubiera
Zohaib
1
Solo para la configuración que puede usar php artisan config:clear, borrará su caché de configuración y no se generará nuevamente y cuando entre en producción, puede ejecutar php artisan config:cachepara almacenar en caché sus configuraciones
Zohaib
1

Si ejecuta este php artisan config:cachecomando en la consola, almacenará todo el contenido del archivo .env en la caché, después de este comando, si agrega algún contenido al archivo .env, no estará disponible hasta que ejecute el php artisan config:clearcomando

Chandrakant Ganji
fuente
1

Me enfrento al mismo problema mucho tiempo durante el desarrollo larvario. Algunas veces env deja de funcionar y no devuelve ningún valor. esa razón puede ser diferente dependiendo de su situación. pero en mi caso hace unos dias solo corro

 PHP artisan::config:clear

así que tenga cuidado al usar este comando. porque borrará todos los datos de configuración de su caché. así que después de eso, no devolverá ningún valor. Entonces, en esta situación, debe usar esto primero si ha ejecutado el comando PHP artisan config :: clear .

php artisan config:cache  // it will cache all data 
php artisan config:clear
Configuration cache cleared!
pankaj kumar
fuente
1

Experimenté esto. La razón fue que Apache (usuario www-data) no podía leer .env debido a los permisos de archivo. Así que cambié los permisos del archivo para asegurarme de que el servidor (apache) tenía permisos de lectura para el archivo. Solo eso y boom, ¡todo estaba funcionando ahora!
Actualización: la
forma de hacer esto varía, dependiendo de quién sea el propietario del archivo .env, pero asumiendo que pertenece al www-datagrupo Apache , puede hacer esto:

sudo chmod g+r .env

Modifíquelo según su estructura de permisos.

gthuo
fuente
So i changed the file permissions to ensure that the server (apache) had read permissions to the file.este es un enfoque realmente incorrecto. Debería haber arreglado la configuración de apaxhe para que sirva a este sitio en particular como propietario que posee estos archivos
Marcin Orlowski
0

Cometí el error al hacer dd / die / dump en el index.phparchivo. Esto hace que el sistema no regenere las configuraciones.

Basta con volcar en los archivos de vista. Los cambios en el .envarchivo se actualizan instantáneamente.

Bing Han
fuente
0

Tuve algunos problemas con esto. Parecía ser un problema de permiso de archivo en algún lugar de la aplicación, no el archivo .env.

Tuve que - detener mi ventana acoplable - usar chown para establecer los derechos de propiedad de mi propio usuario para todo el proyecto - iniciar la ventana acoplable nuevamente

Esta vez funcionó.

thephper
fuente
-1

Probé casi todo lo anterior. Terminé haciendo

chmod 666 .env

que funcionó. Este problema parece seguir apareciendo en la aplicación que heredé, sin embargo, esta vez más reciente fue después de agregar un .env.testing. Ejecutando Laravel 5.8

PeterG
fuente