Mojolicious - работник миньонов не запускается автоматически
Я использую Mojolicious полное приложение и загружаю Minion (бэкэнд sqlite). Мой вопрос заключается в том, почему работник миньонов не запускается сам по себе, когда я запускаю приложение для веселья с помощью гипнотической загрузки. Согласно документации Minion, он должен:
Фоновые рабочие процессы обычно запускаются командой Minion:: Command:: minion:: worker, которая становится автоматически доступной, когда приложение загружает 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
В настоящее время я запускаю работника миньонов в фоновом режиме (который также как-то убивается через некоторое время, как ни странно) следующим образом:
/var/www/apps/script/apps minion worker -m production
Спасибо.
2 ответа
Как упоминали Корион и Гриннц в комментариях:
Работники Minion - это отдельные несвязанные процессы, которые вы должны запускать и управлять самостоятельно.
Хорошие новости:
Команда Mojolicious открыла этот выпуск. Скоро будет решено: разрешить запуск приложения Minion на сервере приложений
С использованием
Mojo::IOLoop::Subprocess
вы можете запустить подпроцесс в приложении следующим образом:
my $subprocess = Mojo::IOLoop::Subprocess->new;
$subprocess->run(sub {...}, sub{...})
Документация здесь
Это означает, что вы можете использовать
before_server_start
хук для запуска рабочих подпроцессов через
app->minion->worker->run
Однако после того, как они начались, кажется, AFAIK, нет простого способа остановить их, когда само приложение останавливается, поэтому вам нужно проверить их и пожинать плоды - вот где Proc::ProcessTable может помочь.
Я собрал все это вместе в быстром и грязном плагине здесь .