Привет я хочу запустить файл миграции в качестве фоновой задачи, используя 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 потребитель и консоль команды миграции работает
При запуске миграции запрашивается ввод данных пользователем, чтобы подтвердить миграцию. Это потому, что таблицы могут быть изменены, что может привести к потере данных. Именно поэтому эту операцию не следует запускать в производство.
Чтобы эта команда работала автоматически, без вмешательства пользователя, что потребуется при ее выполнении в процессе обработки сообщения очереди, необходимо добавить дополнительную опцию. В вашем примере это может выглядеть так:
$command = array(
'command' => 'doctrine:migrations:execute',
'--no-interaction' => null,
'--em' => "dynamic",
'version' => $this->container->getParameter('migration_version')
);
// same as in your code snippet
Дополнительная опция должна предотвращать прерывание вашей команды. Если это по-прежнему не помогает рассмотреть возможность увеличения вывода ошибок, добавив еще одну опцию -vvv
для дополнительной отладочной информации аналогично массиву.
Других решений пока нет …