Laravel 5.2 nie odczytuje pliku env


111

Po aktualizacji do Laravel 5.2 żadne wartości moich .envplików nie są odczytywane. Postępowałem zgodnie z instrukcjami aktualizacji ; żaden z moich plików konfiguracyjnych nie został zmieniony poza auth.php. Wszystkie działały dobrze w poprzedniej wersji 5.1.19

.env zawiera wartości, takie jak

DB_DATABASE=mydb
DB_USERNAME=myuser

config/database.php zawiera

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

Otrzymuję ten błąd:

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

Najwyraźniej nie ściągam mojej konfiguracji env. Ma to wpływ na każdy z moich plików konfiguracyjnych, w tym stron trzecich, takich jak bugsnag.

Ja też próbowałem

php artisan config:clear
php artisan cache:clear

Aktualizacja

Próbować php artisan tinker

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

Próbowałem zainstalować nową kopię Laravel 5.2. Zasadniczo kopiowałem tylko w moim appfolderze; nie zawiera żadnych dodatkowych pakietów kompozytorów. Nadal mam ten sam problem. Mam inne projekty Laravel 5.2 na tym samym serwerze, które działają dobrze.


1
Czy na pewno plik .env nosi tylko nazwę .env? Nie .env.example?
James Elliott

Andrew, czy edytujesz plik .env za pomocą interfejsu Forge, czy go przesyłasz?
Mark Davidson

@JamesElliott tak, to jest.env
andrewtweber

1
A może prowadzisz to lokalnie? Jeśli biegasz pod rzemieślnikiem, musisz go ponownie uruchomić, na wszelki wypadek.
Mark Davidson

@MarkDavidson edytuje go za pomocą vi w wierszu poleceń i nie, jest na pełnym serwerze
andrewtweber

Odpowiedzi:


92

Z oficjalnych uwag o aktualizacji Laravel 5.2:

Jeśli używasz config:cachepolecenia podczas wdrażania, musisz upewnić się, że wywołujesz envfunkcję tylko z plików konfiguracyjnych, a nie z dowolnego innego miejsca w aplikacji.

Jeśli dzwonisz envz poziomu aplikacji, zdecydowanie zaleca się dodanie odpowiednich wartości konfiguracyjnych do plików konfiguracyjnych i wywołanie envz tej lokalizacji, co pozwoli na konwersję envwywołań na configpołączenia.

Źródła: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0


36
php artisan config:cacherozwiązałem to za mnie - nic innego nie pomogło. Nawet php artisan config:clear- dzięki!
kair

36
Laravel 5.3 php artisan config:clearto jedyna rzecz, która działała dla mnie
Peon

9
Laravel 5.4 - wdrożony na VPS: php artisan config:clearzadziałał dla mnie. Nie robiłem wcześniej config: cache, więc wydawało się trochę dziwne, że musiałem wyczyścić pamięć podręczną.
Antonio,


upewnij się, że edytujesz .envzamiast .env.examplepliku
Connor Leech

85

Jeśli którakolwiek z twoich .envzmiennych zawiera spacje, upewnij się, że umieściłeś je w cudzysłowach. Na przykład:

SITE_NAME="My website"

Nie zapomnij wyczyścić pamięci podręcznej przed testowaniem:

php artisan config:cache
php artisan config:clear

Tak, to działa. Po zmianie dowolnej wartości w .envpliku uruchom php artisan config:cache & php artisan config:clearpolecenie. To będzie działać.
Chandan Sharma

42

Łał. O jeny. To dlatego, że miałem wartość env ze spacją, a nie w cudzysłowie

To

SITE_NAME=My website

Zmieniono na to

SITE_NAME="My website"

Naprawione. Myślę, że miało to związek z Laravel 5.2, który teraz aktualizuje vlucas / phpdotenv z 1.1.1 do 2.1.0


To samo - wydaje się, że spacje powodują problemy w wersji .env5.2, podczas gdy w wersji 5.1 nie.
thomthom

5
I to jest jeden z moich (wielu) niepokojów związanych z Laravelem: czasami po cichu ignoruje i akceptuje różne konfiguracje i / lub inne rodzaje błędów, bez żadnych oznak, że coś poszło nie tak. Biorąc pod uwagę, może to być „funkcja” programu phpdotenv, ale Laravel nadal wie, że istnieje .envplik, który należy dołączyć, i że nie powiodło się, ale nie zawraca sobie głowy informowaniem o tym nikogo.
dKen

2
Już zmarnowałem godziny na coś tak głupiego. Dziękuję za powstrzymanie mnie od marnowania więcej!
Jenski

30

Dla mnie zadziałało to w następującej kolejności:

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

A resztę próbowałem bez powodzenia.


2
To zamówienie rozwiązało mój problem po kilku godzinach debugowania.
Minion

Uratował mi życie. Tks. Ale nie rozumiałem, dlaczego.
Mateus Galasso

ten rozkaz mnie uratował. Dzięki
Asad ullah

Dziękuję miły nieznajomy internetowy, udało się!
Eduardo

Jeśli dostaniesz 1 dolara za każdym razem, gdy dojdę do tej odpowiedzi, już byłbyś bogaty. Dzięki!
Altin

26

Miałem podobny problem w moim config/services.phpi rozwiązałem za pomocą poleceń config cleari optimize:

php artisan config:clear
php artisan optimize

26

Dla mnie zadziałało następujące

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

18

Uruchom to:

php artisan config:clear
php artisan cache:clear

następnie
php artisan config:cache


13

Kiedy uruchomisz polecenie, php artisan config:cacheusunie ono wszystkie envzmienne i env()poda wartości null, spróbuj uruchomić następujące polecenie i uruchom env()ponownie, aby ponownie zacząć łapać wszystkie envzmienne

php artisan config:clear

Jak magia, to zadziałało na mnie - świetna odpowiedź!
David Partyka

12

Miałem ten sam problem w środowisku lokalnym, rozwiązałem przez

  1. php artisan config: wyczyść
  2. php artisan config: cache
  3. a następnie anulowanie polecenia obsługi php artisan i ponowne uruchomienie.

12

Możesz rozwiązać problem, postępując zgodnie z poniższymi zaleceniami

Zalecenie 1:

Musisz użyć pliku .env poprzez pliki konfiguracyjne, co oznacza, że ​​jesteś proszony o odczytanie pliku .env z plików konfiguracyjnych (takich jak /config/app.php lub /config/database.php), a następnie możesz użyć konfiguracji pliki z dowolnego miejsca Twojego projektu.

Zalecenie 2: ustaw wartość środkową w podwójnym cudzysłowie

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

Zalecenie 3: Po zmianie dowolnej konfiguracji lub wartości środowiska należy zachować następującą sekwencję poleceń.

 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

Zalecenie 4: Jeśli syntax1 nie działa, możesz wypróbować inną składnię2

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

Zalecenie 5: Gdy liczba użytkowników jest duża / większa , należy zwiększyć rozmiar pamięci w konfiguracji serwera .

Zalecenie 6: Ustaw domyślną prawdopodobną wartość podczas odczytywania zmiennej .env.

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

10

Brakowało mi tego w instrukcjach aktualizacji:

Dodaj opcję konfiguracji środowiska env do app.phppliku konfiguracyjnego, która wygląda następująco: 'env' => env('APP_ENV', 'production')

Dodanie tej linii sprawiło, że .envplik lokalny został poprawnie odczytany.


1
Wydaje mi się, że wystąpił ten sam błąd, ponieważ moja aplikacja była Laravel 4, a następnie została zaktualizowana do 5.0, potem do 5.1 itd. Prawdopodobnie przegapiłem dodanie tej wartości w moim app.php. Dzięki za zaoszczędzenie mi dużo czasu. Oto głos za!
Bruno P. Kinoshita

9

Prostota to potęga:

php artisan config:cache

Otrzymacie:

Pamięć podręczna konfiguracji została wyczyszczona!

Konfiguracja została zapisana w pamięci podręcznej!


7

To samo dzieje się, gdy: port znajduje się w lokalnym pliku .env

znowu podwójne cudzysłowy załatwiają sprawę

APP_URL="http://localhost:8000"

i wtedy

php artisan config:clear


4

Oprócz tego, co sugerował @andrewtweber, upewnij się, że nie ma spacji między KEY = a wartością, chyba że znajduje się między cudzysłowami

plik .env np:

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

do:

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

3

Napotkałem ten sam problem na moim komputerze lokalnym i wypróbowałem wszystkie odpowiedzi tutaj, ale bezskutecznie. Tylko to działało dla mnie php artisan config:cleari restart server. Działa jak marzenie!


4
@RameshMhetre spróbuj php artisan config:cache, php artisan config:cleara następniephp artisan cache:clear
Dexter Bengil

2

Rozwiązałem ten problem generując nowy klucz za pomocą polecenia: php artisan key:generate


2

jeśli wywołałeś config: cache podczas lokalnego rozwoju, możesz to cofnąć, usuwając plik bootstrap / cache / config.php. i to jest praca dla mnie.


2

jeśli wywołałeś config: cache podczas lokalnego rozwoju, możesz to cofnąć, usuwając plik bootstrap / cache / config.php. i to jest praca dla mnie.

@Payal Pandav dał komentarz powyżej.

Chcę przedstawić proste obejście. Po prostu edytuj plik config.php w folderze bootstrap / cache /. I zmień poświadczenia. To zadziałało dla mnie. Nie usuwaj tego pliku, ponieważ może on zawierać inne ważne dane w środowisku produkcyjnym.


2

W moim przypadku laravel 5.7 env('APP_URL')nie działa, ale config('app.url')działa. Jeśli dodam nową zmienną do envi do configu - to nie działa - ale po php artisan config:cacheuruchomieniu działa.


3
Jeśli jesteś w środowisku programistycznym, nie powinieneś buforować swojej konfiguracji i tras. Aby usunąć całą pamięć podręczną, możesz użyć:php artisan optimize:clear
Zohaib

@ZohaibHassan Jak wyłączyć cache dla konfiguracji i tras w środowisku deweloperskim?
Kamil Kiełczewski

1
Powyższe polecenie wyłączy 1. pamięć podręczną tras, 2 pamięć podręczną konfiguracji, 3. wyczyść widoki 4. wyczyść zoptymalizowane pliki 5. wyczyść pamięć podręczną, jeśli istnieje
Zohaib

1
Tylko do konfiguracji możesz użyć php artisan config:clear, wyczyści pamięć podręczną konfiguracji i nie będzie generować ponownie, a kiedy przejdziesz do produkcji, możesz uruchomić, php artisan config:cacheaby buforować swoje konfiguracje
Zohaib

1

Jeśli uruchomisz to php artisan config:cachepolecenie na konsoli, zapisze całą zawartość pliku .env w pamięci podręcznej, po tym poleceniu, jeśli dołączysz jakąkolwiek zawartość do pliku .env, nie będzie ona dostępna do czasu uruchomienia php artisan config:clearpolecenia


1

Z tym samym problemem borykam się przez długi czas podczas rozwoju larw. czasami env przestaje działać i nie zwraca żadnej wartości. ten powód może być inny, w zależności od Twojej sytuacji. ale w moim przypadku kilka dni temu po prostu biegam

 PHP artisan::config:clear

więc uważaj, używając tego polecenia. ponieważ wyczyści wszystkie dane konfiguracyjne z pamięci podręcznej. więc po tym nie zwróci żadnej wartości. W tej sytuacji musisz użyć tego najpierw, jeśli uruchomiłeś polecenie PHP artisan config :: clear .

php artisan config:cache  // it will cache all data 
php artisan config:clear
Configuration cache cleared!

1

Ja tego doświadczyłem. Powodem było to, że apache (dane www użytkownika) nie mógł odczytać .env z powodu uprawnień do pliku. Więc zmieniłem uprawnienia do pliku, aby upewnić się, że serwer (apache) ma uprawnienia do odczytu pliku. Tylko to i bum, teraz wszystko działało!
Aktualizacja:
jak to zrobić różni się w zależności od tego, kto jest właścicielem pliku .env, ale zakładając, że należy on do www-datagrupy Apache , możesz to zrobić:

sudo chmod g+r .env

Zmodyfikuj go w zależności od struktury uprawnień.


So i changed the file permissions to ensure that the server (apache) had read permissions to the file.to jest właściwie złe podejście. Powinieneś mieć naprawioną konfigurację apaxhe, aby służyła tej konkretnej witrynie jako właścicielowi, który jest właścicielem tych plików
Marcin Orłowski

0

Popełniłem błąd, wykonując dd / die / dump w index.phppliku. Powoduje to, że system nie generuje ponownie konfiguracji.

Po prostu zrób zrzut w widoku, który zrobi. Zmiany w .envpliku aktualizują się natychmiast.


0

Miałem z tym pewne problemy. Wyglądało na to, że gdzieś w aplikacji jest problem z uprawnieniami do pliku - nie dotyczy to pliku .env.

Musiałem - zatrzymać mój docker - użyć chown, aby ustawić prawa do własnego użytkownika dla całego projektu - ponownie uruchomić docker

Tym razem się udało.


-1

Wypróbowałem prawie wszystkie powyższe. Skończyło się robić

chmod 666 .env

który zadziałał. Wydaje się, że ten problem nadal pojawia się w aplikacji, którą odziedziczyłem, jednak ostatnio nastąpiło to po dodaniu testu .env.testing. Uruchamianie Laravel 5.8

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.