2015-08-19 4 views
2

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

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

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

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

var_dump(env('DB_DATABSE')); 

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

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

Я попытался свалить постоянную температуру (DIR) в разных местах, это всегда правильно.

Есть ли у кого-нибудь идея, что может быть неправильным, или как я могу копать дальше в то, что может быть неправильно?

ответ

0

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

https://github.com/vlucas/phpdotenv

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

Я использую мерзавец на экземпляре производства, так что мое решение для задачи установить переменные окружения в каждом файл ВХост для каждого экземпляра мне нужно на сервере:

SetEnv DB_DATABASE laravel_stage 
SetEnv CACHE_PREFIX stage 

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

+0

Это не то, что dotenv предназначен для случаев разработки. Это конфигурационный файл, специфичный для среды. Я использую его во всех своих средах, и он работает как шарм. Является ли you'r .envfile включенным в репозиторий git? Затем он может перезаписываться при развертывании.Как указано в руководстве, он должен быть исключен из вас vcs. Vhosts env работает одинаково и является жизнеспособным решением для этого. Причиной для .env является более низкий профиль для использования. Вы можете отредактировать его через ftp. Он не требует специальных разрешений. –

+0

Как утверждается в вопросе, каждый экземпляр имеет свой собственный .env-файл и исключается из vc. Я добавил ссылку на документацию более четко. – DalekSall

1

Я недавно столкнулся с этой проблемой и хотел поделиться тем, что я узнал здесь, так как это один из лучших результатов в поиске 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 

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

Смежные вопросы