Symfony 6.1 -如何运行后台任务将条目插入数据库?

rdlzhqv9  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(121)

我目前正在处理一个Symfony 6.1项目,有一个数据库插入需要生成相当多的条目(30 k+)。我想将此插入过程作为后台任务运行,一旦所有条目都在数据库中创建,我想发送一封电子邮件。
现在,我在Symfony文档中找到了以下关于后台任务的文章:https://symfony.com/doc/current/components/process.html#running-processes-asynchronously
但是,我不太明白如何让进程在后台运行。
我的当前代码:

$process = new Process(); //not sure what to put in for the constructor
        $process->start(function ($data) {
            foreach($data as $key => $value) {
                $value->setExampleValue("example");
                $this->entityManager->persist($value);
                $this->entityManager->flush();
            }
            ... email code
        });

        if (!$process->isSuccessful()) {
            throw new ProcessFailedException($process);
        }

更新日期:

有人注意到我已经看过Symfony的命令了。现在我试着启动我的自定义命令作为一个进程。但是每次我启动命令都失败了,退出代码是:().代码如下:

$process = new Process(['php bin\console app:generate-test']); 
        //$process->setWorkingDirectory(substr(getcwd(), 0, strrpos(getcwd(), '/')));
$process->start();
    

        if (!$process->isSuccessful()) {
            throw new ProcessFailedException($process);
        }

然而,如果我通过控制台启动命令“php bin/console app:generate-test”,它就可以工作,并且我会在控制台窗口中打印一个简单的文本行。
有人知道我做错了什么吗?

最终解决方案:

我没有使用Symfony的Process组件,而是按照评论中的建议切换到Messenger组件。
现在这个工作就像一个魅力!
我发现了一个很棒的教程系列,用于理解和实现信使:https://www.youtube.com/watch?v=Xwn_BNfyjgk

a2mppw5e

a2mppw5e1#

我认为您应该查看命令(https://symfony.com/doc/current/console.html
然后,您可以运行该命令并最小化控制台窗口,或者使用进程管理器(如Supervisor)在后台运行该命令。

相关问题