Я настроил конвейер в BitBucket для автоматического развертывания главной ветки моего проекта в экземпляре веб-приложения Azure.
Приложение развертывает файлы и запускает composer update, как и ожидалось (хотя и предупреждает, что работает от имени root), но php artisan migrate --force возвращает:
Illuminate\Database\QueryException : SQLSTATE[HY000] [1045] Access denied for user 'forge'@'127.0.0.1' (using password: NO) (SQL: select * from information_schema.tables where table_schema = forge and table_name = migrations)
Я уже создал файл .env, и когда я запускаю php artisan migrate из оболочки, он работает успешно, и таблицы создаются.
Поскольку «forge» является пользователем по умолчанию в database.php, я полагаю, что .env не загружается, когда команда запускается из сценария развертывания.
Есть ли что-то очевидное, что я пропустил, чтобы вызвать эту проблему, или я должен как-то настроить его, чтобы он не запускался от имени пользователя root?
Я мог бы заменить данные базы данных в database.php, но мне кажется, что это неправильно.
редактировать
Содержимое .env (некоторые данные заменены на ********):
APP_NAME=Laravel
APP_ENV=local
APP_KEY=********
APP_DEBUG=true
APP_URL=********
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=********
DB_DATABASE=********
DB_USERNAME=********
DB_PASSWORD=********
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY = "${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER = "${PUSHER_APP_CLUSTER}"
редактировать 2
Я понимаю, что мне еще предстоит опубликовать свой файл bitbucket-pipelines.yml:
image: php:7.2-fpm
pipelines:
branches:
master:
- step:
script:
- apt-get update && apt-get install -qy git curl libmcrypt-dev mysql-client && apt-get install -qy unzip git
- yes | pecl install mcrypt-1.0.1
- docker-php-ext-install pdo_mysql
- curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
- composer update
- php artisan migrate --force
- php artisan serve --port=80 &
- sleep 5
- curl -vk http://localhost:80
deployment: staging
services:
- mysql
definitions:
services:
mysql:
image: mysql:5.7
environment:
MYSQL_DATABASE: '******'
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
MYSQL_USER: '******'
MYSQL_PASSWORD: '******'
MYSQL_PORT: '******'
У меня также есть файл .env.pipelines:
APP_ENV=local
APP_KEY=******
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=******
DB_USERNAME=******
DB_PASSWORD=******
Я отредактировал свой исходный вопрос, включив в него содержимое файла .env.
У вас есть другие файлы .env[...] (кроме .env.example)?
У меня есть файл .env-pipelines, который я только что включил в вопрос вместе с моим файлом bitbucket-pipelines.yml.
Можете ли вы отредактировать файлы приложения перед запуском php artisan migrate? Результат dd(\App::environment(), env('DB_USERNAME')); в AppServiceProvider::boot() был бы интересен.
В общем, сайты Stack Exchange предпочитают, чтобы люди не отмечали изменения, когда они вносятся, поскольку в системе есть средство отслеживания изменений, что делает ненужными маркеры «редактирования».
@JonasStaudenmeir возвращает правильное имя пользователя базы данных.






Эта ошибка в основном возникает из-за изменений в файле .env:
Illuminate\Database\QueryException : SQLSTATE[HY000] [1045] Access denied for user 'forge'@'127.0.0.1' (using password: NO) (SQL: select * from information_schema.tables where table_schema = forge and table_name = migrations)
Всякий раз, когда мы меняем DB_DATABASE, DB_USERNAME и DB_PASSWORD в файле .env, нам нужно очистить кеш.
После завершения редактирования .env необходимо очистить кеш: php artisan config:cache
ПРИМЕЧАНИЕ. Если в базе данных не установлен пароль, очистите его DB_PASSWORD, пустое место также должно быть удалено (в прошлом я также сталкивался с этой проблемой, он считал пробел паролем)
Я запустил php artisan config:cache после изменения файла .env и по-прежнему ту же ошибку — я также перезапустил экземпляр веб-приложения с тем же результатом.
Привет @RichardHedges Может быть, у вас есть проблема с некоторыми другими кодами, но с этим решением ваша проблема может быть решена. Я даю вам решение из моего предыдущего опыта, у меня была проблема, похожая на вашу.
Я не уверен, какие другие «коды» могут вызывать эту проблему, так как больше ничего не изменилось. Я пытался запустить это со свежей установкой Laravel, используя правильные данные базы данных, и когда я запускаю php artisan migrate из командной строки, он работает нормально, но при запуске из конвейеров BitBucket он не использует правильные переменные из .env.
Не видя вашего сценария развертывания и того, как вы подключаетесь к серверу Azure, вам нужно будет поместить
php artisan config:clear // Это перезагрузит файл .env в кеш
после того, как вы подключились к своему серверу, но до запуска
php artisan migrate
Я добавил сценарий развертывания к исходному вопросу сейчас, и я запустил php artisan config:clear, но все еще сталкиваюсь с той же проблемой.
Пожалуйста, проверьте ссылку:
https://laravel.com/docs/5.7/configuration#configuration-кэширование
php artisan config:cache
Приведенная выше команда просто восстановит кеш для вас. (если добавлено как часть скрипта развертывания)
В противном случае вы можете использовать php artisan config:clear только для очистки существующей конфигурации и извлечения значений из файлов .env/config (добавьте как часть сценария развертывания).
Пробовал очищать кеш, но проблема та же.
Хорошо, сделайте так, на вашем сервере создайте файл .env в отдельном каталоге, скажем, /home/<user>/config/.env, и в вашем сценарии развертывания просто добавьте наконец команду, которая просто символизирует файл .env в это место, подобно ln -s <file_loc> .env. Поскольку обычно мы не фиксируем .env , похоже, что ваш .env даже не присутствует в вашей папке сборки.
Я уже создал файл .env в том же каталоге, что и artisan - файл определенно существует. Я проверю ваше предложение позже.
См. confluence.atlassian.com/bitbucket/…
Каково содержимое файла
.envперед запускомphp artisan migrate?