Mojolicious - minion worker 不会自动启动

Mojolicious - minion worker doesn't start automatically

我正在使用 Mojolicious full app and loading Minion(后端 sqlite)。 我的问题是,当我使用 hypnotoad. According to the documentation Minion 启动 mojolicious 应用程序时,为什么 minion worker 不会自行启动它应该:

Background worker processes are usually started with the command Minion::Command::minion::worker, which becomes automatically available when an application loads Mojolicious::Plugin::Minion.

环境:

Mojolicious 完整应用程序

package Apps;

use Moo;
extends 'Mojolicious';

sub startup {
    my $self = shift;

    $self->plugin(Config => file => '/var/www/apps/lib/appconf.perl');
    $self->plugin(Minion => {SQLite => 'sqlite:/var/www/apps/db/minion_backend_sqlite.db'});
    ...
}

这是我启动服务器的方式:

/usr/local/bin/hypnotoad /var/www/apps/script/apps

目前,我在后台启动 minion worker(它也会在一段时间后以某种方式被杀死,starangely)像这样:

/var/www/apps/script/apps minion worker -m production

谢谢。

正如 Corion 和 Grinnz 在评论中提到的那样:

Minion workers are separate unrelated processes, that you must start and manage on your own.

好消息:

Mojolicious 团队已打开此问题。即将解决: Allow for Minion worker to be started by the application server

使用 Mojo::IOLoop::Subprocess 你可以像这样在应用程序中启动一个子进程:

my $subprocess = Mojo::IOLoop::Subprocess->new;
$subprocess->run(sub {...}, sub{...})

文档here

这意味着您可以使用 before_server_start 挂钩通过 app->minion->worker->run

启动工作子进程

一旦它们开始,尽管据我所知似乎没有简单的方法可以在应用程序本身停止时停止它们,因此您必须检查它们并获取它们 - 这是 Proc::ProcessTable 可以提供帮助的地方。

我把所有这些都放在一个快速而肮脏的插件中 here