嗨,我想在symfony中使用RabbitMQ将迁移文件作为后台任务运行 但是当我执行迁移时,在控制台命令中的执行将处于等待状态。
当我按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-bundle
这个symfony包
我认为是因为有两个后台进程rabbirmq使用者和控制台命令迁移正在运行
答案 0 :(得分: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
以获得更多调试信息来增加错误输出。