Как запустить миграцию в RabbitMQ с помощью symfony?

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

когда я нажимаю Ctrl + C и пытаюсь остановить потребителя, миграция начинает выполняться
пожалуйста, помогите мне

$command = array(
'command' => 'doctrine:migrations:execute',
'--em' => "dynamic",
'version' => $this->container->getParameter('migration_version')
);


$kernel = $this->getContainer()->get('kernel');
$application = new Application($kernel);
$application->setAutoExit(false);
$input = new ArrayInput($command);
$output = new BufferedOutput();
$result = $application->run($input, $output);
$s=$output->fetch();

Я попробовал это, пожалуйста, помогите мне использовать

PHP-amqplib / RabbitMQ-расслоение

Это Symfony расслоение

Я думаю, что из-за 2 фоновых процессов Rabbirmq потребитель и консоль команды миграции работает

1

Решение

При запуске миграции запрашивается ввод данных пользователем, чтобы подтвердить миграцию. Это потому, что таблицы могут быть изменены, что может привести к потере данных. Именно поэтому эту операцию не следует запускать в производство.

Чтобы эта команда работала автоматически, без вмешательства пользователя, что потребуется при ее выполнении в процессе обработки сообщения очереди, необходимо добавить дополнительную опцию. В вашем примере это может выглядеть так:

$command = array(
'command' => 'doctrine:migrations:execute',
'--no-interaction' => null,
'--em' => "dynamic",
'version' => $this->container->getParameter('migration_version')
);

// same as in your code snippet

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector