- 環境
- Windows 10
- Laravel Framework 5.5.40
- PHP 7.3.7 (cli)
事象 : .envでDBの設定を変更したのにcache:clear
でエラーになる
.envに誤ったDB設定をしてしまったので書き直したがcache:clear
でエラーになる。
同じ設定でDBのクライアントツールでも他の環境でも問題なく接続できる。
$ php artisan cache:clear
In Oci8.phpline 464:
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。
原因 : キャッシュクリアができなくて.envの設定が反映されていないから
エラーを出している Oci8.php でデバックして確認するとDBの設定が古いままになっている。キャッシュがクリアできない!
やってみて失敗したこと : storageディレクトリにあるキャッシュ用ディレクトリの中身を削除した
php artisan cache:clear
ができないのでconfig/cache.phpで指定しているキャッシュのディレクトリ配下を削除してみた
# storageディレクトリにあるキャッシュのディレクトリを確認する
$ cat config/cache.php | grep storage_path | grep framework
'path' => storage_path('framework/cache/data'),
# 中身を全削除する
$ rm storage/framework/cache/data/*
# 事象は何も変わらなかった
$ php artisan cache:clear
In Oci8.phpline 464:
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。
失敗の原因 : 削除するキャッシュのファイルが違うから
.envファイルの読み込みは,php artisan config:cacheしていない場合にしか行われません! - mpyw's tech blog
というのを読んで、php artisan config:cache
をやめたらいいのかと思った。
設定ファイルのキャッシュを止めることはできません。 - コードログ
というのを読んで、どうしたものかと思いとりあえずLoadEnvironmentVariablesをデバックしてみた。
そして、bootstrap/cache/config.phpというファイルがあれば.envは読み込まれず、なければ.envを読み込むことを知った。
LoadEnvironmentVariables
/**
* Bootstrap the given application.
*
* @param \Illuminate\Contracts\Foundation\Application $app
* @return void
*/
public function bootstrap(Application $app)
{
if ($app->configurationIsCached()) { // <<< ここの中身をデバックして設定ファイルの場所がわかった
return;
}
$this->checkForSpecificEnvironmentFile($app);
try {
(new Dotenv($app->environmentPath(), $app->environmentFile()))->load();
} catch (InvalidPathException $e) {
//
}
}
対応方法 : bootstrap/cache/config.php を削除する
# config.phpを削除する
$ rm bootstrap/cache/config.php
# うまく行った!
$ php artisan config:clear
Configuration cache cleared!