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.
环境:
- Red Hat Enterprise Linux Server - 7.5 (Maipo)
- Perl v5.16.3
- Mojolicious 8.0(超级恶棍)
- 小黄人 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 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。
我正在使用 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.
环境:
- Red Hat Enterprise Linux Server - 7.5 (Maipo)
- Perl v5.16.3
- Mojolicious 8.0(超级恶棍)
- 小黄人 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 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。