我正在使用Mojolicious完整的应用程序并加载Minion(后端sqlite)。 我的问题是,当我使用hypnotoad启动mojolicious应用程序时,为什么minion worker不会自行启动。根据文档Minion,它应该:
通常使用以下命令启动后台工作进程 Minion :: Command :: minion :: worker,该工具自动可用 当应用程序加载Mojolicious :: Plugin :: Minion时。
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
谢谢。
答案 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 中。