Laravel 5.2 não está lendo o arquivo env

110

Após atualizar para o Laravel 5.2, nenhum dos .envvalores do meu arquivo está sendo lido. Segui as instruções de atualização ; nenhum dos meus arquivos de configuração foi alterado, exceto auth.php. Todos estavam funcionando bem na versão anterior, 5.1.19

.env contém valores como

DB_DATABASE=mydb
DB_USERNAME=myuser

config/database.php contém

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

Eu recebo este erro:

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

Claramente, não puxando minha configuração de env. Isso está afetando cada um dos meus arquivos de configuração, incluindo terceiros, como o bugsnag.

Eu também tentei

php artisan config:clear
php artisan cache:clear

Atualizar

Tentando php artisan tinker

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

Tentei instalar uma nova cópia do Laravel 5.2. Basicamente, apenas copiei na minha apppasta; nenhum pacote adicional do compositor está incluído. Ainda tendo o mesmo problema. Tenho outros projetos do Laravel 5.2 no mesmo servidor que estão funcionando bem.

andrewtweber
fonte
1
Tem certeza de que o nome do arquivo .env é apenas .env? Não .env.example?
James Elliott
Andrew, você está editando o arquivo .env pela interface do forge ou enviando-o?
Mark Davidson
@JamesElliott sim, é.env
andrewtweber
1
Ou você está executando isso localmente? Se estiver executando o serviço artesanal, você precisará reiniciá-lo para o caso de ser esse o caso.
Mark Davidson
@MarkDavidson editando-o através do vi na linha de comando, e não, está em um servidor completo
andrewtweber

Respostas:

91

Das notas oficiais de atualização do Laravel 5.2:

Se você estiver usando o config:cachecomando durante a implantação, você deve certificar-se de que está chamando a envfunção apenas de dentro de seus arquivos de configuração, e não de qualquer outro lugar em seu aplicativo.

Se você estiver chamando envde dentro de seu aplicativo, é altamente recomendável adicionar valores de configuração adequados aos seus arquivos de configuração e env, em vez disso, chamar desse local, permitindo que você converta suas envchamadas em configchamadas.

Referência: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0

Gaurav Gupta
fonte
36
php artisan config:cacheresolveu para mim - nada mais ajudou. Nem mesmo php artisan config:clear- obrigado!
kair de
36
Laravel 5.3 php artisan config:clearé a única coisa que funcionou para mim
Peon
9
Laravel 5.4 - implantado em um VPS: php artisan config:clearfuncionou para mim. Eu não fiz o config: cache antes, então me pareceu um pouco estranho ter que limpar o cache.
Antonio
certifique-se de editar em .envvez do .env.examplearquivo
Connor Leech
84

Se alguma de suas .envvariáveis ​​contiver espaço em branco, certifique-se de colocá-las entre aspas duplas. Por exemplo:

SITE_NAME="My website"

Não se esqueça de limpar o cache antes de testar:

php artisan config:cache
php artisan config:clear
benjolly1989
fonte
Sim, está funcionando. Após alterar qualquer valor no .envarquivo, execute o php artisan config:cache & php artisan config:clearcomando. Vai funcionar.
Chandan Sharma
41

Uau. Minha nossa. É porque eu tinha um valor env com um espaço, não entre aspas

este

SITE_NAME=My website

Mudou para este

SITE_NAME="My website"

Corrigido. Eu acho que isso tem a ver com o Laravel 5.2 agora atualizando vlucas / phpdotenv de 1.1.1 para 2.1.0

andrewtweber
fonte
O mesmo pensamento - parece que os espaços causam problemas na .envversão 5.2, enquanto na 5.1 não.
thomthom
5
E este é um dos meus (muitos) bugbears com o Laravel: ele tem o hábito de às vezes ignorar silenciosamente e aceitar uma variedade de configurações e / ou outros tipos de erros, sem nenhuma indicação de que algo deu errado. Dado, esta pode ser uma "característica" do phpdotenv, mas o Laravel ainda sabe que há um .envarquivo que precisa ser incluído, e que não foi bem sucedido, mas não se preocupa em contar a ninguém.
dKen
2
Já perdi horas com algo tão bobo. Obrigado por me impedir de desperdiçar mais!
Jenski
29

Para mim, funcionou nesta ordem:

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

E tentei todos os demais sem sorte.

TrOnNe
fonte
2
Este pedido resolveu meu problema após algumas horas de depuração.
Minion de
Salvou a minha vida. Tks. Mas id não entendia por quê.
Mateus Galasso
este pedido me salvou. Obrigado
Asad ullah
Obrigado, tipo estranho da Internet, isso resolveu!
Eduardo
Se você ganhasse $ 1 toda vez que eu responder a essa pergunta, já estaria rico. Obrigado!
Altin
25

Tive um problema semelhante no meu config/services.phpe resolvi usando os comandos config cleare optimize:

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

Para mim o seguinte funcionou

- php artisan config:cache
- php artisan config:clear
- php artisan cache:clear
beatusfk
fonte
17

Rode isto:

php artisan config:clear
php artisan cache:clear

então
php artisan config:cache

Ganesh K
fonte
11

Tive o mesmo problema no ambiente local, resolvi por

  1. php artisan config: clear
  2. php artisan config: cache
  3. e então cancelando o comando php artisan serve, e reinicie novamente.
Jay_mziray
fonte
11

Você pode resolver o problema com a seguinte recomendação

Recomendação 1:

Você deve usar o arquivo .env por meio de arquivos de configuração, o que significa que você é solicitado a ler o arquivo .env dos arquivos de configuração (como /config/app.php ou /config/database.php), então você pode usar a configuração arquivos de qualquer local do seu projeto.

Recomendação 2: defina seu valor env entre aspas duplas

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

Recomendação 3: mantenha a seguinte sequência de comando após alterar qualquer configuração ou 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

Recomendação 4: quando a sintaxe 1 não está funcionando, você pode tentar outra sintaxe 2

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

Recomendação 5: quando o seu número de usuários é alto / mais , você deve aumentar o tamanho da memória relacionada na configuração do servidor .

Recomendação 6: Defina um valor provável padrão ao ler a variável .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
fonte
11

Quando você disparou o comando php artisan config:cache, ele apagará todas as envvariáveis ​​e env()fornecerá valores nulos, tente executar o comando a seguir e boom lá você env()começará novamente a capturar todas as envvariáveis

php artisan config:clear
Shahrukh Anwar
fonte
Como mágica, isso funcionou para mim - ótima resposta!
David Partyka
9

Eu perdi isso nas instruções de atualização:

Adicione uma opção de configuração de env ao seu app.phparquivo de configuração semelhante a esta: 'env' => env('APP_ENV', 'production')

Adicionar esta linha faz com que o .envarquivo local seja lido corretamente.

dKen
fonte
1
Acho que recebi o mesmo erro, pois meu aplicativo era Laravel 4, depois atualizei para 5.0, depois para 5.1, etc. Provavelmente esqueci de adicionar este valor em meu app.php. Obrigado por me poupar muito tempo. Aqui está um voto positivo!
Bruno P. Kinoshita
8

A simplicidade é o poder:

php artisan config:cache

Você receberá:

Cache de configuração limpo!

Configuração em cache com sucesso!

Adam Kozlowski
fonte
6

A mesma coisa acontece quando: a porta está em seu .env local

novamente as aspas duplas fazem o truque

APP_URL="http://localhost:8000"

e depois

php artisan config:clear
Stavros
fonte
5

exclua o cache usando:

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

Além do que @andrewtweber sugeriu, certifique-se de não ter espaços entre KEY = e o valor, a menos que esteja entre aspas

arquivo .env, por exemplo:

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

para:

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

Eu encontrei o mesmo problema no meu local e tentei todas as respostas aqui, mas sem sucesso. Só isso funcionou para mim, php artisan config:cleare restart server. Funciona como um encanto!

Dexter Bengil
fonte
4
@RameshMhetre tente php artisan config:cache, php artisan config:clearentãophp artisan cache:clear
Dexter Bengil
2

Resolvi este problema gerando uma nova chave usando o comando: php artisan key:generate

Angel Prieto
fonte
2

se você chamou config: cache durante o desenvolvimento local, você pode desfazer isso excluindo o arquivo bootstrap / cache / config.php. e isso é trabalho para mim.

Payal Pandav
fonte
2

se você chamou config: cache durante o desenvolvimento local, você pode desfazer isso excluindo o arquivo bootstrap / cache / config.php. e isso é trabalho para mim.

@Payal Pandav fez o comentário acima.

Eu quero contar uma solução alternativa simples. Apenas edite o arquivo config.php na pasta bootstrap / cache /. E mude as credenciais. Isso funcionou para mim. Não exclua este arquivo, pois ele pode conter outros dados cruciais no ambiente de produção.

Daya Satheesh
fonte
2

No meu caso, laravel 5.7 env('APP_URL')não funciona, mas config('app.url')funciona. Se eu adicionar uma nova variável para enve para config - não funciona - mas depois de php artisan config:cachecomeçar funciona.

Kamil Kiełczewski
fonte
3
Se você estiver em um ambiente de desenvolvimento, não deve armazenar em cache sua configuração e rotas. Para remover todo o cache que você pode usar:php artisan optimize:clear
Zohaib
@ZohaibHassan Como desligar o cache para configuração e rotas no ambiente de desenvolvimento?
Kamil Kiełczewski
1
O comando acima desligará 1. cache de rotas, 2 cache de configuração, 3. limpar visualizações 4. limpar arquivos otimizados 5. limpar cache se houver
Zohaib
1
Apenas para configuração, você pode usá- php artisan config:clearlo para limpar o cache de configuração e não gerar novamente e quando você entrar em produção, você pode executar o php artisan config:cachecache de suas configurações
Zohaib
1

Se você executar este php artisan config:cachecomando no console, ele armazenará todo o conteúdo do arquivo .env no cache; após este comando, se você anexar qualquer conteúdo ao arquivo .env, ele não estará disponível até que você execute o php artisan config:clearcomando

Chandrakant Ganji
fonte
1

Eu enfrento o mesmo problema muitas vezes durante o desenvolvimento larval. algumas vezes env para de funcionar e não retorna nenhum valor. esse motivo pode ser diferente, dependendo da sua situação. mas no meu caso, alguns dias atrás, eu apenas corri

 PHP artisan::config:clear

portanto, tenha cuidado ao usar este comando. porque apagará todos os dados de configuração de seu cache. então, depois disso, ele não retornará nenhum valor. Portanto, nesta situação, você precisa usar isso primeiro se tiver executado o comando PHP artisan config :: clear .

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

Eu experimentei isso. A razão era que o apache (usuário www-data) não conseguia ler .env devido às permissões do arquivo. Então, mudei as permissões do arquivo para garantir que o servidor (apache) tivesse permissões de leitura para o arquivo. Só isso e bum, estava tudo funcionando agora!
Atualização:
como fazer isso varia, dependendo de quem é o proprietário do arquivo .env, mas presumindo que ele pertença ao www-datagrupo Apache , você pode fazer o seguinte:

sudo chmod g+r .env

Modifique-o de acordo com sua estrutura de permissão.

gthuo
fonte
So i changed the file permissions to ensure that the server (apache) had read permissions to the file.esta é realmente uma abordagem errada. Você deve ter corrigido a configuração do apaxhe para que sirva a este site em particular como o proprietário desses arquivos
Marcin Orlowski
0

Cometi o erro ao fazer dd / die / dump no index.phparquivo. Isso faz com que o sistema não gere novamente as configurações.

Basta fazer o dump em view files. As mudanças no .envarquivo são atualizadas instantaneamente.

Bing Han
fonte
0

Eu tive alguns problemas com isso. Parecia ser um problema de permissão de arquivo em algum lugar do aplicativo - não no arquivo .env.

Eu tive que - parar meu docker - usar chown para definir direitos de propriedade para meu próprio usuário para todo o projeto - iniciar o docker novamente

Desta vez funcionou.

thephper
fonte
-1

Tentei quase todas as opções acima. Acabou fazendo

chmod 666 .env

que funcionou. Este problema parece continuar surgindo no aplicativo que herdei, no entanto, o momento mais recente foi após adicionar um .env.testing. Executando o Laravel 5.8

PeterG
fonte