Laravel 5.2 не читает env файл

49

После обновления до Laravel 5.2 ни один из моих значений файла .env не читается. Я выполнил инструкции обновления; ни один из моих файлов конфигурации не был изменен, кроме auth.php. Все они отлично работали в предыдущей версии, 5.1.19

.env содержит такие значения, как

DB_DATABASE=mydb
DB_USERNAME=myuser

config/database.php содержит

'mysql' => [
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
]

Я получаю эту ошибку:

PDOException: SQLSTATE[HY000] [1045] Access denied for user 'forge'@'localhost' (using password: NO)

Понятно, что я не затягиваю конфигурацию env. Это влияет на каждый из моих конфигурационных файлов, включая сторонних производителей, таких как bugsnag.

Я также пробовал

php artisan config:clear
php artisan cache:clear

Обновление

Попытка php artisan tinker

>>> env('DB_DATABASE')
=> null
>>> getenv('DB_DATABASE')
=> false
>>> config('database.connections.mysql.database')
=> "forge"
>>> dd($_ENV)
[]

Я попытался установить новую копию Laravel 5.2. Я в основном копируется только в папку "приложение"; дополнительные пакеты композиторов не включены. По-прежнему имеет ту же проблему. У меня есть другие проекты Laravel 5.2 на том же сервере, которые работают нормально.

  • 1
    Вы уверены, что файл .env называется только .env? Не .env.example?
  • 0
    Эндрю, вы редактируете файл .env через интерфейс forge или загружаете его?
Показать ещё 10 комментариев
Теги:
laravel-5.2
environment-variables

17 ответов

34
Лучший ответ

Ого. Печаль во благо. Это потому, что у меня было значение env с пространством в нем, а не окружено кавычками

Это

SITE_NAME=My website

Изменен для этого

SITE_NAME="My website"

Исправлено. Я думаю, что это связано с тем, что теперь Laravel 5.2 обновляет vlucas/phpdotenv с 1.1.1 до 2.1.0

  • 0
    То же самое - кажется, что пробелы вызывают проблемы в .env под 5.2, где, как и в 5.1, этого не произошло.
  • 4
    И это один из моих (многих) багбиров с Laravel: у него есть привычка иногда молча игнорировать и принимать различные ошибки конфигурации и / или другие типы, без указания на то, что что-то пошло не так. Учитывая это, это может быть «фича» phpdotenv , но Laravel по-прежнему знает, что есть файл .env который нужно включить, и что он не был успешным, но не хочет никому рассказывать.
Показать ещё 1 комментарий
53

Из официальных заметок по версии Laravel 5.2:

Если вы используете команду config:cache во время развертывания, вы должен убедиться, что вы вызываете только функцию env изнутри ваши файлы конфигурации, а не нигде в вашем приложение.

Если вы вызываете env из своего приложения, это сильно рекомендуется добавить правильные значения конфигурации в вашу конфигурацию файлы и вызовите env из этого местоположения вместо этого, что позволяет конвертировать ваш env вызывает вызовы config.

Ссылка: https://laravel.com/docs/5.2/upgrade#upgrade-5.2.0

  • 17
    php artisan config:cache решил это за меня - больше ничего не помогло. Даже не php artisan config:clear - спасибо!
  • 16
    Laravel 5.3 php artisan config:clear единственное, что у меня сработало php artisan config:clear
Показать ещё 3 комментария
27

Если какая-либо из ваших переменных .env содержит пробел, убедитесь, что вы заключили их в двойные кавычки. Например:

SITE_NAME="My website"

Не забудьте очистить кеш до тестирования:

php artisan config:cache;
php artisan config:clear;
16

У меня была аналогичная проблема в моем config/services.php, и я решил использовать команды config clear и optimize:

php artisan config:clear
php artisan optimize
8

запустите это:

php artisan config:clear
php artisan cache:clear

затем
php artisan config:cache

6

У меня была такая же проблема в местной среде, я решил

  1. Конфигурация PHP Artisan: очистить
  2. Конфигурация php artisan: кеш
  3. и затем отмена команды php artisan serve и перезапустите снова.
6

Когда вы запустили команду php artisan config:cache она уничтожит все переменные env а env() выдаст нулевые значения, попробуйте выполнить команду follwing и загляните туда, где env() снова начнет перехватывать все переменные env

php artisan config:clear
5

Простота - это мощность:

php artisan config:cache

Вы получите:

Очистка кэша конфигурации

Конфигурация кэширована успешно!

5

Я пропустил это в инструкциях по обновлению:

Добавьте параметр конфигурации env в конфигурационный файл app.php, который выглядит следующим образом: 'env' => env('APP_ENV', 'production')

Добавление этой строки привело к правильному чтению локального файла .env.

  • 1
    Я думаю, что я получил ту же ошибку, так как мое приложение было Laravel 4, затем обновлено до 5.0, затем до 5.1 и т. Д. Вероятно, пропустил добавление этого значения в мой app.php. Спасибо, что сэкономили мне много времени. Вот такой вот голос!
4

удалить кеш, используя:

    php artisan config:clear
    php artisan config:cache
3

Я столкнулся с той же проблемой на моем местном, и я попробовал все ответы здесь, но безрезультатно. Только это сработало для меня, php artisan config:clear и restart server. Работает как шарм!

  • 0
    Нет, даже это не работает для меня.
  • 3
    @RameshMhetre попробуйте php artisan config:cache , php artisan config:clear затем php artisan cache:clear
2

Я решил эту проблему, генерируя новый ключ, используя команду: php artisan key:generate

2

Дополнительно к тому, что предложили @andrewtweber, убедитесь, что у вас нет пробелов между KEY = и значением, если оно не находится между кавычками

.env, например:

...
SITE_NAME= My website
MAIL_PORT= 587
MAIL_FROM_NAME= websitename
...

в

...
SITE_NAME="My website"
MAIL_PORT=587
MAIL_FROM_NAME=websitename
...
1

если вы вызывали config: cache во время локальной разработки, вы можете отменить это, удалив файл bootstrap/cache/config.php. и это работа для меня.

0

Я сделал ошибку, выполнив команду dd/die/dump в файле index.php. Это заставляет систему не восстанавливать конфиги.

Просто сделайте дамп в файлах представления. Изменения в файле .env обновляются мгновенно.

0

Я испытал это. Причина была в том, что apache (пользовательские www-данные) не мог прочитать.env из-за прав доступа к файлу. Поэтому я изменил права доступа к файлу, чтобы сервер (apache) имел права на чтение файла. Только это и бум, теперь все работало!

0

Если вы запустите эту команду php artisan config:cache на консоли, то она сохранит все содержимое файла.env в кеше, после этой команды, если вы добавите любое содержимое в файл.env, она не будет доступна, пока вы не запустите php artisan config:clear команда

Ещё вопросы

Сообщество Overcoder
Наверх
Меню