Миграция php artisan в Azure (в конвейере BitBucket)

Я настроил конвейер в 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 перед запуском php artisan migrate?

Jonas Staudenmeir 15.02.2019 18:51

Я отредактировал свой исходный вопрос, включив в него содержимое файла .env.

Richard Hedges 16.02.2019 10:19

У вас есть другие файлы .env[...] (кроме .env.example)?

Jonas Staudenmeir 16.02.2019 10:25

У меня есть файл .env-pipelines, который я только что включил в вопрос вместе с моим файлом bitbucket-pipelines.yml.

Richard Hedges 19.02.2019 09:49

Можете ли вы отредактировать файлы приложения перед запуском php artisan migrate? Результат dd(\App::environment(), env('DB_USERNAME')); в AppServiceProvider::boot() был бы интересен.

Jonas Staudenmeir 20.02.2019 10:06

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

J. A. Streich 20.02.2019 21:43

@JonasStaudenmeir возвращает правильное имя пользователя базы данных.

Richard Hedges 04.03.2019 16:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
7
7
1 355
3

Ответы 3

Эта ошибка в основном возникает из-за изменений в файле .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 и по-прежнему ту же ошибку — я также перезапустил экземпляр веб-приложения с тем же результатом.

Richard Hedges 04.03.2019 17:50

Привет @RichardHedges Может быть, у вас есть проблема с некоторыми другими кодами, но с этим решением ваша проблема может быть решена. Я даю вам решение из моего предыдущего опыта, у меня была проблема, похожая на вашу.

Udhav Sarvaiya 05.03.2019 06:22

Я не уверен, какие другие «коды» могут вызывать эту проблему, так как больше ничего не изменилось. Я пытался запустить это со свежей установкой Laravel, используя правильные данные базы данных, и когда я запускаю php artisan migrate из командной строки, он работает нормально, но при запуске из конвейеров BitBucket он не использует правильные переменные из .env.

Richard Hedges 05.03.2019 10:39

Не видя вашего сценария развертывания и того, как вы подключаетесь к серверу Azure, вам нужно будет поместить

php artisan config:clear // Это перезагрузит файл .env в кеш

после того, как вы подключились к своему серверу, но до запуска

php artisan migrate

Я добавил сценарий развертывания к исходному вопросу сейчас, и я запустил php artisan config:clear, но все еще сталкиваюсь с той же проблемой.

Richard Hedges 04.03.2019 17:51

Пожалуйста, проверьте ссылку:

https://laravel.com/docs/5.7/configuration#configuration-кэширование

php artisan config:cache

Приведенная выше команда просто восстановит кеш для вас. (если добавлено как часть скрипта развертывания)

В противном случае вы можете использовать php artisan config:clear только для очистки существующей конфигурации и извлечения значений из файлов .env/config (добавьте как часть сценария развертывания).

Пробовал очищать кеш, но проблема та же.

Richard Hedges 04.03.2019 17:51

Хорошо, сделайте так, на вашем сервере создайте файл .env в отдельном каталоге, скажем, /home/<user>/config/.env, и в вашем сценарии развертывания просто добавьте наконец команду, которая просто символизирует файл .env в это место, подобно ln -s <file_loc> .env. Поскольку обычно мы не фиксируем .env , похоже, что ваш .env даже не присутствует в вашей папке сборки.

Arvind Kala 07.03.2019 12:24

Я уже создал файл .env в том же каталоге, что и artisan - файл определенно существует. Я проверю ваше предложение позже.

Richard Hedges 07.03.2019 12:37

См. confluence.atlassian.com/bitbucket/…

Arvind Kala 07.03.2019 12:47

Другие вопросы по теме