Laravel 5.2 не читает env файл
После обновления до 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 на том же сервере, которые работают нормально.
36 ответов
Вот это да. Печаль во благо. Это потому, что у меня было значение env с пробелом в нем, а не в кавычках
это
SITE_NAME=My website
Поменял на это
SITE_NAME="My website"
Починил это. Я думаю, что это связано с Laravel 5.2, теперь обновляющим vlucas / phpdotenv с 1.1.1 до 2.1.0
Если любой из ваших .env
переменная содержит пробел, убедитесь, что вы заключили их в двойные кавычки. Например:
SITE_NAME="My website"
Не забудьте очистить кеш перед тестированием:
php artisan config:cache;
php artisan config:clear;
Из официальных замечаний по обновлению Laravel 5.2:
Если вы используете
config:cache
Во время развертывания необходимо убедиться, что вы вызываете толькоenv
функционировать из ваших файлов конфигурации, а не из другого места в вашем приложении.Если вы звоните
env
из вашего приложения настоятельно рекомендуется добавить правильные значения конфигурации в ваши файлы конфигурации и вызватьenv
вместо этого, что позволяет конвертировать вашиenv
звонки вconfig
звонки.
Для меня это сработало так:
php artisan config:cache
php artisan config:clear
php artisan cache:clear
И все остальные я перепробовал без удачи.
Когда вы уволили команду php artisan config:cache
тогда он уничтожит все env
переменные и env()
даст нулевые значения, попробуйте выполнить следующую команду env()
снова начать ловить все env
переменная
php artisan config:clear
У меня сработало следующее
- Конфигурация php artisan: кеш
- Конфигурация PHP Artisan: очистить
- PHP кеш ремесленника: очистить
У меня была похожая проблема в моем config/services.php
и я решил использовать config clear
а также optimize
команды:
php artisan config:clear
php artisan optimize
Решить проблему можно по следующей рекомендации
Рекомендация 1:
Вы должны использовать файл.env через файлы конфигурации, это означает, что вам необходимо прочитать файл.env из файлов конфигурации (таких как /config/app.php или /config/database.php), тогда вы можете использовать конфигурацию файлы из любого места вашего проекта.
Рекомендация 2: укажите значение env в двойных кавычках
GOOGLE_CLIENT_ID="887557629-9h6n4ne.apps.googleusercontent.com"
GOOGLE_CLIENT_SECRET="YT2ev2SpJt_Pa3dit60iFJ"
GOOGLE_MAP="AIzaSyCK6RWwql0DucT7Sl43w9ma-k8qU"
Рекомендация 3. Сохраняйте следующую последовательность команд после изменения любой конфигурации или значения env.
composer dump-autoload
composer dump-autoload -o
php artisan clear-compiled
php artisan optimize
php artisan route:clear
php artisan view:clear
php artisan cache:clear
php artisan config:cache
php artisan config:clear
Рекомендация 4: Если синтаксис1 не работает, вы можете попробовать другой синтаксис2
$val1 = env('VARIABLE_NAME'); // syntax1
$val2 = getenv('VARIABLE_NAME'); // syntax2
echo 'systax1 value is:'.$val1.' & systax2 value is:'.$val2;
Рекомендация 5: Если количество пользователей велико / больше, вам необходимо увеличить соответствующий размер памяти в конфигурации сервера.
Рекомендация 6. Установите вероятное значение по умолчанию, когда вы читаете переменную.env.
$googleClinetId=env("GOOGLE_CLIENT_ID","889159-9h6n95f1e.apps.googleusercontent.com");
$googleSecretId=env("GOOGLE_CLIENT_ID","YT2evBCt_Pa3dit60iFJ");
$googleMap=env("GOOGLE_MAP","AIzaSyCK6RUl0T7Sl43w9ma-k8qU");
Запустите это:
php artisan config:clear
php artisan cache:clear
или жеphp artisan config:cache
У меня была такая же проблема в местной среде, я решил
- Конфигурация PHP Artisan: очистить
- Конфигурация php artisan: кеш
- и затем отмена команды php artisan serve и перезапустите снова.
Я пропустил это в инструкции по обновлению:
Добавьте опцию конфигурации env к вашему
app.php
файл конфигурации, который выглядит следующим образом:'env' => env('APP_ENV', 'production')
Добавление этой строки получило местное .env
файл для правильного чтения.
Простота - это сила:
php artisan config:cache
Вы получите:
Кэш конфигурации очищен!
Конфигурация успешно кэширована!
Удалить кеш, используя:
php artisan config:clear
php artisan config:cache
То же самое происходит, когда: порт находится в вашем локальном.env
опять двойные кавычки добиваются цели
APP_URL="http://localhost:8000"
а потом
php artisan config:clear
Я столкнулся с той же проблемой на моем местном, и я попробовал все ответы здесь, но безрезультатно. Только это сработало для меня,php artisan config:clear
а также restart server
, Работает как шарм!
Также в дополнение к тому, что @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
...
Я испытал это. Причина была в том, что apache (пользовательские www-данные) не мог прочитать.env из-за прав доступа к файлу. Поэтому я изменил права доступа к файлу, чтобы сервер (apache) имел права на чтение файла. Только это и бум, теперь все работало!
Если вы вызывали config:cache во время локальной разработки, вы можете отменить это, удалив файл bootstrap/cache/config.php. и это работа для меня.
Я знаю, что это очень старо, но сегодня я обнаружил еще одну причину, по которой мой не загружался:
- У меня был (совершенный)
- я недавно переключился
APP_ENV
отdev
кlocal
С L8 (и, возможно, раньше) происходит то, что он пытается найти.env.<APP_ENV>
и если находит, использует.
Забавный факт: в моем случае это был файл-чертеж с неконфиденциальной информацией, который не предназначался для прямого использования, но так уж вышло.
Удаление.env.local
привел к тому, что Laravel искал.env
вместо.
Запустите эту команду
php artisan config:clear //repopulate all the env variable
php artisan cache:clear //flush all the cached content
php artisan config:cache //flush all cached env variable
В моем случае Laravel 5,7 env('APP_URL')
не работа но config('app.url')
работает. Если я добавлю новую переменную в env
а в конфиг - не работает - но после php artisan config:cache
это начало работает.
Я решил эту проблему, генерируя новый ключ, используя команду: php artisan key:generate
Если вы вызывали config:cache во время локальной разработки, вы можете отменить это, удалив файл bootstrap/cache/config.php. и это работа для меня.
@Payal Pandav дал комментарий выше.
Я хочу рассказать простой обходной путь. Просто отредактируйте файл config.php в папке bootstrap / cache /. И изменить учетные данные. Это сработало для меня. Пожалуйста, не удаляйте этот файл, так как он может содержать другие важные данные в производственной среде.
В моем случае мне нужно было перезапустить мои задания Supervisord (т.е. мои рабочие очереди). После этого новая переменная среды, которую я добавил в свой файл .env, была успешно загружена в мое приложение.
Помните, что рабочие очереди — это долгоживущие процессы, которые хранят состояние загруженного приложения в памяти. В результате они не заметят изменений в вашей кодовой базе после их запуска. Итак, во время процесса развертывания обязательно перезапустите обработчики очередей. Кроме того, помните, что любое статическое состояние, созданное или измененное вашим приложением, не будет автоматически сбрасываться между заданиями.
Источник: Официальные документы Laravel — Очереди
Если вы запустите это php artisan config:cache
команда на консоли, тогда он будет хранить все содержимое файла.env в кеше, после этой команды, если вы добавите любое содержимое в файл.env, он не будет доступен, пока вы не запустите php artisan config:clear
команда
Я сталкиваюсь с той же проблемой много раз во время развития личинок. иногда env перестает работать и не возвращает никакого значения. эта причина может быть другой в зависимости от вашей ситуации. но в моем случае несколько дней назад я просто бегал
PHP artisan::config:clear
так что будьте осторожны при использовании этой команды. потому что он сотрет все данные конфигурации из своего кеша. поэтому после этого он не вернет никакого значения. Поэтому в этой ситуации вам нужно сначала использовать это, если вы выполнили команду PHP artisan config:: clear.
php artisan config:cache // it will cache all data
php artisan config:clear
Configuration cache cleared!
Если вы пришли сюда, потому что у вас есть несколько.env.*
файлы иphp artisan config:cache
привел к неправильным настройкам, это потому, что он (пытался) прочитать.env
файл, а не тот, который специфичен для вашей среды. Попробуйте это вместо этого (гдеCODE
соответствует.env.CODE
):
APP_ENV=CODE php artisan config:cache
В моем случае я использовал VSCODE, и оказалось, что мой.env
файл был автоматически обнаружен IDE как файл сценария оболочки, а не как Ini, который вызывал у меня проблему. Это редкое явление, но я надеюсь, что это сэкономит кому-то время.
Для кодера Laravel. Мы можем использовать config() для решения этой проблемы.
в файле "config/app.php":
'same_url' => env('SAME_URL', 'http://localhost'),
в вашей кодовой базе:
$sameURL = config('app.same_url').'/orders/';
Пробовал почти все вышеперечисленное. Закончил делать
chmod 666 .env
который работал. Эта проблема, кажется, продолжает возникать в приложении, которое я унаследовал, однако в последний раз это было после добавления.env.testing. Запуск Laravel 5.8