Перезагрузка переменных .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