Laravel 5.0.33 загружает неправильный файл .env

Я использую Laravel 5.0.33 и у меня есть следующие папки на моем сервере:

/var/www/laravel_dev/
/var/www/laravel_stage/
/var/www/laravel_production/

Каждый из них имеет свой собственный файл .env и базу данных, но по какой-то причине каждый из них иногда загружает неправильный файл .env (как, например, каждый сотый запрос).

Я подумал, что он загружает неправильный файл .env, потому что, когда я выгружаю базу данных env:

var_dump(env('DB_DATABSE'));

Иногда он возвращает имя базы данных laravel_production на сайте laravel_dev.

Я выполнил поиск по имени базы данных laravel_production, но его нет в папке dev.

У меня есть triede, чтобы сбросить константу dir (DIR) разные места, это всегда правильно.

У кого-нибудь есть идея, что может быть не так, или как я могу еще глубже понять, что может быть не так?

2

Решение

Я недавно столкнулся с этой проблемой, и хотел поделиться тем, что я узнал здесь, так как это один из лучших результатов поиска Bing / Google.

Скорее всего, если вы столкнетесь с этим, вы работаете на многопоточном веб-сервере, и это не было проблемой, пока несколько человек не попали на сервер.

Короче говоря, использование пакета dotenv, который использует Laravel, не безопасен для потоков. Вы можете увидеть обсуждение этого здесь:
https://github.com/vlucas/phpdotenv/issues/76

Быстрое решение заключается в запуске:

artisan config:cache

И я настоятельно рекомендую добавить строку комментария в начало вашего файла .env:

# IMPORTANT! If you change ANYTHING in here make sure to run > artisan config:cache

Надеюсь, это поможет.

1

Другие решения

Оказывается, что dotevn предназначен только для разработки экземпляров проекта. В производстве файлы конфигурации должны быть жестко закодированы.

https://github.com/vlucas/phpdotenv

«phpdotenv создан для сред разработки и, как правило, не должен использоваться в рабочей среде. В рабочей среде фактические переменные среды должны быть установлены таким образом, чтобы при каждом запросе не требовалось загружать файл .env».

Я использую git на производственном экземпляре, поэтому мое решение проблемы — установить переменные среды в каждом файле vhost для каждого экземпляра, который мне нужен на сервере:

SetEnv DB_DATABASE laravel_stage
SetEnv CACHE_PREFIX  stage

Работает как шарм.

0

По вопросам рекламы [email protected]