Laravel leest het .env-bestand niet na wijziging

Laravel Is Not Reading



Probleem

Dit is een vrij algemeen probleem dat zich voordoet bij nieuwe Laravel-ontwikkelaars.

Veel mensen hebben geprobeerd hun .env-bestand bij te werken om te zien dat wanneer ze hun toepassing vernieuwen, de .env-configuratiewaarden niet verschijnen.







En wat interessanter is, is dat dit vrij vaak verschijnt nadat je je Laravel-versie hebt geüpgraded.



Dus je zou bijvoorbeeld dit in je .env-bestand hebben:



DB_DATABASE=laraveldb
DB_USERNAME=laraveluser

Dan zou je natuurlijk in het config/database.php-bestand dit hebben:





'mysql'=> [
' database '=>env('DB_DATABASE','dij'),
'gebruikersnaam'=>env('DB_USERNAME','dij'),
]

forge staat hier voor standaardwaarden. Dit betekent dat deze waarden worden gebruikt voor het geval u uw DB_DATABASE en DB_USERNAME waarden in uw .env-bestand. Deze informatie zal binnenkort nuttig zijn.

Hoe u weet dat u dit specifieke probleem heeft, is als u de volgende uitzondering tegenkomt:



PDOException: SQLSTATE[HY000] [1045]Toegang geweigerd voor gebruiker 'lar'@'localhost'
( gebruik makend van wachtwoord : NEE )

Dit laat duidelijk zien dat uw Laravel-toepassing de standaardwaarde uit uw . haalt config/database.php bestand en niet van uw .env .

Voordat je iets anders doet, kun je ook proberen dit probleem te verifiëren met behulp van php artisan tinker:

>>>env('DB_DATABASE')
=> nul
>>>getenv('DB_DATABASE')
=> vals
>>>configuratie(' database .verbindingen.mysql. database ')
=>dij
>>>dd($ _ENV)
[]

Je zult vaak zien dat het volgende ook geen verschil maakt. Ontwikkelaars proberen echter hun configuratie te testen door een volledig nieuwe Laravel-installatie uit te voeren en gewoon de oude app-map te kopiëren. Ze voeren geen installatie van Composer-pakketten uit of doen niets anders.

Tenzij je Linux gebruikt (ik zal je later vertellen waarom), zul je geen veranderingen zien.

Oplossing

Zoals altijd zijn er veel dingen die u kunt doen om dit probleem op te lossen, maar een paar ervan hebben meer kans van slagen.

Wis je configuratiecache

Ten eerste, als je dat nog niet hebt gedaan, moet je je configuratiecache wissen voordat je iets anders kunt doen.

Omdat onze code tegenwoordig zoveel bibliotheken gebruikt, zijn we genoodzaakt om dingen in de cache te plaatsen om er tijdens runtime snel toegang toe te krijgen.

Ik had hier persoonlijk problemen mee op Windows en Mac, maar ik merkte dat om de een of andere reden op Linux (Ubuntu) deze configuratiebestanden ofwel worden gewist met een soort haak of dat ze helemaal niet in de cache worden opgeslagen, omdat ik in staat was om laad de toepassing opnieuw met nieuwe .env-waarden zonder het volgende te doen.

Zorg ervoor dat u uw configuratiecache leegmaakt door de volgende opdrachten uit te voeren:

php artisan config:cache
php artisan config:Doorzichtig

Controleer op lege ruimtes in uw .env-bestand

De volgende oplossing is het hebben van spaties in uw .env-bestand. En deze als waar de meeste mensen falen en hun haar beginnen te scheuren.

Het is heel gemakkelijk om dit te missen, maar als voorbeeld wat je in je .env-bestand zou kunnen hebben, is zoiets als dit:

SITE NAAM=Mijn Laravel-toepassing

Dit alleen zal niet werken, omdat spaties het .env-bestand zullen beschadigen.

Wat u moet doen, is uw waarden als volgt tussen de aanhalingstekens plaatsen:

SITE NAAM=Mijn Laravel-toepassing

Deze keer zou alles goed moeten werken.

Zorg ervoor dat u uw configuratiecache wist telkens wanneer u een wijziging aanbrengt. We kunnen dit hetzelfde doen als voorheen:

php artisan config:cache
php artisan config:Doorzichtig