Author image Михаил Че
and 1 contributors

Mojolicious::Plugin::Minion::Workers

Доброго всем

¡ ¡ ¡ ALL GLORY TO GLORIA ! ! !

VERSION

0.09075 (up to Minion 9.07/100+minor)

NAME

Mojolicious::Plugin::Minion::Workers - does extend base Mojolicious::Plugin::Minion on manage Minion workers.

SYNOPSIS

  # Mojolicious (define amount workers in config)
  $self->plugin('Minion::Workers' => {Pg => ..., workers=>2});
  # or pass to $app->minion->workers-.manage(<num>) later
  $self->plugin('Minion::Workers' => {Pg => ...});

  # Mojolicious::Lite (define amount workers in config)
  plugin 'Minion::Workers' => {Pg => ..., workers=>2};

  # Add tasks to your application
  app->minion->add_task(something_slow => sub {
    my ($job, @args) = @_;
    sleep 5;
    say 'This is a background worker process.';
  });
  
  # But you can define tasks in config as well
  $self->plugin('Minion::Workers' => {Pg => ..., tasks => { foo_task => sub { ... }, }, });
  
  # Start manage with amount workers
  app->minion->workers->manage(4);
  # or get from config
  app->minion->workers->manage();

  # Start jobs from anywhere in your application

DESCRIPTION

Mojolicious::Plugin::Minion::Workers is a Mojolicious plugin for the Minion job queue and has extending base Mojolicious::Plugin::Minion for enable workers managment.

Extend base plugin config

Mojolicious::Plugin::Minion::Workers apply all config options of the base plugin Mojolicious::Plugin::Minion, and define following

workers(integer)

Amount of Minion workers need to start/restart. This value can be overriden on $app-minion->workers->manage(...) >.

tasks(hashref)

You can define Minion tasks in config.

  ..., tasks => { foo_task => sub { ... }, },

Manage workers

Mojolicious::Plugin::Minion::Workers add attr workers to the $app->minion object. $app->minion->workers object has following new one public method.

manage(integer amount)

Start/restart Minion passed amount workers or get its from plugin config. None workers mean skip managment.

  $app->minion->workers->manage(2);

Tested on standard commands (on Linux):

  $ perl script/app.pl daemon       # one minion worker will be starting
  $ perl script/app.pl prefork        # your amount minion workers will be starting
  $ morbo script/app.pl                 # when morbo restarts on watch changes one minion worker will be restarting too
  $ hypnotoad script/app.pl           # your amount minion workers will be starting
  $ hypnotoad script/app.pl           # on hot deploy minion workers will be restarting too
  $ hypnotoad -s script/app.pl        # minion workers will stoping too

NOTE. For commands $ morbo script/app.pl and $ perl script/app.pl daemon amount workers always one process.

NOTE. In case hypnotoad and $ kill -USR2 app_pid minion workers will not restarts, sorry. Always use hot deploy command $ hypnotoad script/app.pl.

BIG NOTE. When minion workers restarts (hypnotoad | morbo) then ALL exists minion processes stoped. So if you run many separate apps with one database backend then dont use this module. Or set separate backend databases as well.

HELPERS

Mojolicious::Plugin::Minion::Workers enable all helpers through base plugin Mojolicious::Plugin::Minion, thus you dont need apply base plugin (auto register).

METHODS

Mojolicious::Plugin::Minion::Workers inherits all methods from Mojolicious::Plugin::Minion and override the following new ones.

register

  $plugin->register(Mojolicious->new, {Pg => ..., worker=>1});

Register plugin in Mojolicious application.

SEE ALSO

Mojolicious::Plugin::Minion, Minion, Mojolicious::Guides, https://mojolicious.org.

AUTHOR

Михаил Че (Mikhail Che), <mche[-at-]cpan.org>

BUGS / CONTRIBUTING

Please report any bugs or feature requests at https://github.com/mche/Mojolicious-Plugin-Minion-Workers/issues. Pull requests also welcome.

COPYRIGHT

Copyright 2019+ Mikhail Che.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.