Запустите php artisan из одной установки Laravel в другую - PullRequest
0 голосов
/ 15 октября 2018

У нас есть веб-сайт развертывания Laravel, настроенный под deploy.mysite.com , который обрабатывает развертывания для множества других веб-сайтов.

Еще один веб-сайт, который я пытаюсь развернуть, -также сайт Laravel находится под site2.myothersite.com .

Оба находятся на одном сервере.Deploy вызывает сценарий на site2, этот сценарий развертывания запускает различные команды после cd в каталоге проекта.Мы используем следующее для обновления структуры базы данных.

php artisan migrate --force

Обычно, когда он запускается напрямую через SSH, когда он находится в корне проекта, он работает очень хорошо.

Однако, когда он запускается черезсценарий развертывания (использующий php exec() для запуска этих команд), процесс работает - однако вместо обновления проекта, в который мы вошли cd, обновляет структуру базы данных сайта развертывания!

Похоже, что команда php artisan migrate игнорирует тот факт, что я cd перешел в другой проект, и получает значения базы данных из текущего каталога.

Какможно ли изменить это поведение?

Ответы [ 3 ]

0 голосов
/ 19 октября 2018
$log = shell_exec("unset DB_HOST &&
       unset DB_PORT && 
       unset DB_PASSWORD && 
       unset DB_USERNAME && 
       unset DB_DATABASE && 
       composer dump-autoload &&
       cd /var/www/yourproject/ && php /var/www/yourproject/artisan migrate:fresh &&
       php /var/www/yourproject/artisan db:seed &&
       php /var/www/yourproject/artisan seed:translation");
0 голосов
/ 19 октября 2018

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

Что я сделал, чтобы решить эту проблему

В своем сценарии развертывания я вручную загрузил файл .env и перезаписал переменные среды с помощьюoverload, а не просто load;

$dotenv = Dotenv::create(__DIR__);
$dotenv->overload();

Это было буквально все, что мне нужно было сделать, чтобы мой оригинальный скрипт работал.

ПРИМЕЧАНИЕ: как этоэто установка laravel на всех концах, пакет dotenv уже установлен.Это можно использовать для любого проекта, установив его отдельно.

0 голосов
/ 15 октября 2018

Вместо cd для каталога, вы можете изменить команду на что-то похожее на это:

php /var/www/sitea/artisan migrate --force

Это запустит команду ремесленника для предоставленного каталога.

...