Problém
Toto je poměrně častý problém, který se objeví mezi novými vývojáři Laravelu.
Mnoho lidí se pokouší aktualizovat své .soubor env, jen aby zjistil, že při aktualizaci aplikace se soubor .Hodnoty konfigurace env se nezobrazují.
A co je zajímavější je, že se to docela často objeví po upgradu vaší verze Laravel.
Například byste to měli ve svém .soubor env:
DB_DATABASE = laraveldbDB_USERNAME = laraveluser
Pak přirozeně uvnitř konfigurace / databáze.soubor php byste měli toto:
'mysql' => ['database' => env ('DB_DATABASE', 'lar'),
'username' => env ('DB_USERNAME', 'lar'),
]
forge zde znamená výchozí hodnoty. To znamená, že tyto hodnoty budou použity v případě, že jste nezadali svůj DB_DATABASE a DB_USERNAME hodnoty uvnitř vašeho .soubor env. Tyto informace budou trochu užitečné.
Jak však víte, že máte tento konkrétní problém, je to, že narazíte na následující výjimku:
PDOException: SQLSTATE [HY000] [1045] Přístup odepřen pro uživatele 'lar' @ 'localhost'(pomocí hesla: NE)
To jasně ukazuje, že vaše aplikace Laravel stahuje výchozí hodnotu z vašeho config / databáze.php soubor a ne z vašeho .env .
Než uděláte cokoli jiného, můžete se také pokusit ověřit tento problém pomocí php artisan tinker:
>>> env ('DB_DATABASE')=> null
>>> getenv ('DB_DATABASE')
=> false
>>> config ('databáze.připojení.mysql.databáze')
=> „Lar“
>>> dd ($ _ ENV)
[]
Často uvidíte, že ani provedení následující věci nezmění. Vývojáři se však snaží otestovat svou konfiguraci spuštěním zcela nové instalace Laravel a zkopírováním staré složky aplikace. Neprovádějí žádné instalace skladatelských balíčků ani nic jiného.
Pokud nejste na Linuxu (o něco později vám řeknu), neuvidíte žádné změny.
Řešení
Jako vždy existuje mnoho věcí, které můžete udělat, abyste se pokusili tento problém vyřešit, ale u několika z nich je větší pravděpodobnost úspěchu.
Vymažte mezipaměť konfigurace
Nejprve, pokud nemáte, musíte vyčistit konfigurační mezipaměť, než budete moci dělat cokoli jiného.
Protože náš kód dnes používá tolik knihoven, jsme nuceni ukládat věci do mezipaměti, abychom k nim během běhu měli rychlý přístup.
Osobně jsem s tím měl problémy na Windows a Mac, ale všiml jsem si, že z nějakého důvodu jsou v Linuxu (Ubuntu) tyto konfigurační soubory buď vymazány nějakým způsobem, nebo se vůbec neukládají do mezipaměti, protože jsem byl schopen znovu načtěte aplikaci novým .hodnoty env bez provedení následujících kroků.
Ujistěte se, že jste vymazali mezipaměť konfigurace spuštěním následujících příkazů:
php artisan config: mezipaměťphp artisan config: vymazat
Zkontrolujte, zda ve vašem souboru nejsou prázdná místa .soubor env
Úplně další řešení spočívá v tom, že máte uvnitř prázdná místa .soubor env. A tohle, pokud většina lidí selže a začne si trhat vlasy.
Je velmi snadné si to nechat ujít, ale jako příklad toho, co byste mohli mít ve svém .soubor env je něco jako toto:
SITE_NAME = Moje laravel aplikaceToto samo o sobě nebude fungovat, protože mezery poškodí .soubor env.
Co musíte udělat, je zabalit vaše hodnoty do uvozovek takto:
SITE_NAME = „Moje laravelní aplikace“Tentokrát by mělo všechno fungovat dobře.
Při každé změně nezapomeňte vymazat mezipaměť konfigurace. Můžeme to udělat stejně jako dříve:
php artisan config: mezipaměťphp artisan config: vymazat