Перезагрузка переменных .env без перезапуска сервера (Laravel 5, общий хостинг)
My Laravel 5 работает нормально, пока база данных не была настроена, и обнаружила эту ошибку:
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
Проведя некоторые исследования, похоже, что я слишком поздно настроил MySQL-доступ, поэтому я должен перезапустить сервер, чтобы получить правильные переменные среды. Ну, я использую общий сервер Dreamhost, и я просто не могу этого сделать.
Как я могу исправить эту проблему?
Спасибо
Ответы
Ответ 1
В config/database.php
я изменил соединение DB по умолчанию с mysql на sqlite. Я удалил файл .env
(фактически переименовал его) и создал файл sqlite с помощью touch storage/database.sqlite
. Миграция работала с sqlite.
Затем я переключил обратно config/database.php
соединение DB по умолчанию с mysql и восстановил файл .env
. Миграция работала с mysql.
Это не имеет смысла, я думаю. Возможно, было что-то с сервером.
Ответ 2
Если вы запустили php artisan config:cache
на своем сервере, то ваше приложение Laravel может кэшировать устаревшие настройки конфигурации, которые вы поместили в файл .env
.
Запустите php artisan config:clear
, чтобы исправить это.
Ответ 3
Возможно, что ваши конфигурационные переменные кэшируются. Подтвердите свой config/app.php
, а также ваш файл .env
, затем попробуйте
php artisan cache:clear
в командной строке.
Ответ 4
Краткое решение:
use Dotenv;
with(new Dotenv(app()->environmentPath(), app()->environmentFile()))->overload();
with(new LoadConfiguration())->bootstrap(app());
В моем случае мне нужно было восстановить соединение с базой данных после программного изменения .env, но это не сработало. Если у вас возникли проблемы, попробуйте
app('db')->purge($connection->getName());
после перезагрузки .env, потому что Laravel App мог получить доступ к соединению по умолчанию раньше, и \Illuminate\Database\DatabaseManager
должен перечитать параметры конфигурации.
Ответ 5
Если кто-то наткнется на этот вопрос, который не может перезагрузить свой веб-сервер (длинная консольная команда, как бегун очереди), или нужно перезагрузить их .env файл в середине запроса, я нашел способ правильно перезагрузить переменные .env в laravel 5.
use Dotenv;
use InvalidArgumentException;
try {
Dotenv::makeMutable();
Dotenv::load(app()->environmentPath(), app()->environmentFile());
Dotenv::makeImmutable();
} catch (InvalidArgumentException $e) {
//
}
Ответ 6
Для ясности есть 4 типа кэшей, которые вы можете очистить в зависимости от вашего случая.
php artisan cache:clear
Вы можете запустить приведенный выше оператор в своей консоли, когда хотите очистить кеш приложения. Что он делает, так это то, что этот оператор очищает все кэши внутри хранилища \framework\cache.
php artisan route:cache
Это очищает ваш кеш маршрута. Поэтому, если вы добавили новый маршрут или изменили контроллер маршрута или действие, вы можете использовать этот, чтобы перезагрузить его.
php artisan config:cache
Это очистит кеширование файла env и перезагрузит его
php artisan view:clear
Это очистит откомпилированные файлы просмотра вашего приложения.
Для общего хостинга
Большинство провайдеров виртуального хостинга не предоставляют SSH-доступ к системам. В таком случае вам нужно будет создать маршрут и вызвать следующую строку, как показано ниже:
Route::get('/clear-cache', function() {
Artisan::call('cache:clear');
return "All cache cleared";
});
Ответ 7
Я знаю, что это старый, но для локального разработчика, это то, что вернуло вещи к производственному файлу .env:
rm bootstrap/cache/config.php
затем
php artisan config:cache
php artisan config:clear
php artisan cache:clear