Laravel, кажется, случайным образом использует конфигурацию database.php по умолчанию вместо конфигурации .env

Обновлено: Благодаря @ PedroFaria99, очистка кеша конфигурации решила проблему, но если кто-то хочет дать объяснение по поводу аспекта случайности, не стесняйтесь.

У меня проблема с моей локальной установкой laravel 5.5 (производственная среда не пострадала). Здесь Laravel используется как API и обслуживает клиентское приложение VueJS.

Иногда (случайным образом) мой laravel возвращает моему клиенту ошибку 500. Это может происходить на разных маршрутах, но никогда на одном и том же, после 1-10 последовательных HTTP-запросов или нет. а когда проверяю хранилище

[2018-03-09 13:44:08] production.ERROR: PDOException: SQLSTATE[HY000] [1045] Access Denied for user: 'forge'@'@localhost' (password: NO) in [...] Illuminate\Database\Connectors\Connector.php:119

Однако мой файл .env настроен, и мой файл database.php использует env () с параметрами по умолчанию "forge" и "localhost". Поэтому я попытался изменить этот параметр на «test», и следующие 500 ошибок были такими же, но с «test» вместо «forge».

Я очень запутался, так как эта ошибка не возникает систематически.

.env файл

APP_ENV=local
APP_DEBUG=true
DB_HOST=localhost
DB_DATABASE=mydatabase
DB_USERNAME=root
DB_PASSWORD=

database.php

...
'default' => env('DB_CONNECTION', 'mysql'),

...    
'connections' => [
        'mysql' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'database'  => env('DB_DATABASE', 'test'),
            'username'  => env('DB_USERNAME', 'test'),
            'password'  => env('DB_PASSWORD', '')

...

попробуйте ключ php artisan: сгенерируйте, чтобы увидеть, исправляет ли он, ну, возможно, вы захотите очистить кеш конфигурации

PedroFaria99 09.03.2018 15:24

Не думал об этом, так как это была случайность. Очистить кеш конфигурации вроде сработало. Спасибо ! Но есть ли представления о том, что это было довольно случайно?

Ekushisu 09.03.2018 15:28

не совсем, кажется, сервер иногда просто нервничает, не уверен

PedroFaria99 09.03.2018 15:35

Я считаю, что вам нужно кэшировать его, поскольку он в значительной степени обновляет файл ./project/bootstrap/chache/config.php, который, кажется, содержит кешированные значения. Я верю, что он работает как резервная копия, на случай, если laravel не полностью загрузит файл .env перед загрузкой остальных автоматически загруженных файлов.

Sérgio Reis 09.03.2018 15:47

У меня такая же проблема, в итоге я установил одинаковую конфигурацию для обоих файлов, и проблема (очевидно) исчезла

Motassem MK 09.03.2018 16:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
5
189
2

Ответы 2

Пытаться

php artisan cache:clear
php artisan config:cache

Это происходит из-за того, что laravel сохраняет значения env в своем кеше, и если ваша конфигурация не кэширована, она будет принимать конфигурацию, сохраненную в файле database.php. Вы не можете напрямую получить доступ к значениям env во время выполнения.

Ненавижу оживлять мертвый поток, но после некоторого душевного поиска я обнаружил, что проблема может заключаться в отсутствии безопасности потоков в php: https://github.com/laravel/framework/issues/28571 и отличное описание здесь: https://mattallan.me/posts/how-php-environment-variables-actually-work/

Другие вопросы по теме