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.


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


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

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


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.


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

24

Para mim o seguinte funcionou

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

17

Rode isto:

php artisan config:clear
php artisan cache:clear

então
php artisan config:cache


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.

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");

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

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.


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!


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


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
...

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!


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


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.


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.


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.


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


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!

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.


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.


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.


-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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.