Mojolicious-奴才工作者不会自动启动

时间:2018-12-14 06:06:50

标签: perl mojolicious job-queue hypnotoad

我正在使用Mojolicious完整的应用程序并加载Minion(后端sqlite)。 我的问题是,当我使用hypnotoad启动mojolicious应用程序时,为什么minion worker不会自行启动。根据文档Minion,它应该:

  

通常使用以下命令启动后台工作进程   Minion :: Command :: minion :: worker,该工具自动可用   当应用程序加载Mojolicious :: Plugin :: Minion时。

环境:

  • 红帽企业Linux服务器-7.5(Maipo)
  • Perl v5.16.3
  • Mojolicious 8.0(超级恶棍)
  • Minion 9.01

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工人(该工人在一段时间后也被杀死),就像这样:

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

谢谢。

2 个答案:

答案 0 :(得分:0)

正如Corion和Grinnz在评论中所述:

  

奴才工人是独立的,不相关的进程,必须启动   并自行管理。

好消息:

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

答案 1 :(得分:0)

使用 Mojo::IOLoop::Subprocess,您可以在应用程序中启动一个子进程,如下所示:

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

文档here

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

启动工作子进程

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

我已将所有这些放在一个快速而肮脏的插件 here 中。