=encoding utf8
=head1 Mojolicious::Plugin::Minion::Workers
★★★ Доброго всем ★★★
¡ ¡ ¡ ALL GLORY TO GLORIA ! ! !
=head1 VERSION
0.9091 (up to Minion version/10+C<child minor>)
=head1 NAME
Mojolicious::Plugin::Minion::Workers - does extend base Mojolicious::Plugin::Minion
on manage Minion workers.
=head1 SYNOPSIS
# Mojolicious (define amount workers in config)
$self->plugin('Minion::Workers' => {Pg => ..., workers=>2, manage=>1, });
# or pass to $app->minion->workers->manage(<number>) for run 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) = @_;
...
});
# 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 number from config
app->minion->workers->manage();
# Start jobs from anywhere in your application
=head1 DESCRIPTION
L<Mojolicious::Plugin::Minion::Workers> is a L<Mojolicious> plugin for the L<Minion> job
queue and has extending base L<Mojolicious::Plugin::Minion> for enable workers managment.
=head1 Extend base plugin config
L<Mojolicious::Plugin::Minion::Workers> apply all config options
of the base plugin L<Mojolicious::Plugin::Minion>, and define following:
=head2 workers => <integer>
Amount of Minion workers need to start/restart. None defaults.
This value can be overriden on C<< $app->minion->workers->manage(...) >>.
..., workers => 4, ...
=head2 manage => <boolean>
Start/restart Minion workers during plugin registration. Defaults to false.
If this option is not set then you can start Minion workers
by C<< $app->minion->workers->manage() >> see below.
..., manage => 1, ...
=head2 tasks => <hashref>
You can define Minion tasks in config.
..., tasks => {foo_task => sub { ... }, ...},
=head2 <backend name: Pg|SQLite|...> => <connection string> | <backend object> | <coderef>
If config parameter B<backend name> is a B<coderef> then returned value (connection string or backend object)
from callback will reassigned to B<backend name> config option,
i.e. C<< $conf->{<backend name>} = $conf->{<backend name>}->($app); >>.
..., Pg => sub { my $app = shift; ... }, ...
=head1 Manage workers
L<Mojolicious::Plugin::Minion::Workers> add attr B<workers> to the C<< $app->minion >> object.
The C<< $app->minion->workers >> object has following public methods.
=head2 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 shell 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
B<NOTE>. For shell commands C< $ morbo script/app.pl > and C< $ perl script/app.pl daemon >
amount Minion workers is B<one> process always.
B<NOTE>. In case with hypnotoad if you want C< $ kill -USR2 app_pid >
then Minion workers will not restarts, sorry.
Always use hot deploy command C< $ hypnotoad script/app.pl >.
B<BIG NOTE>. When Minion workers restarts (hypnotoad | morbo) then
B<ALL> exists Minion processes stopped and then running.
So if you run many separate apps with one database backend
then dont use this module or set separate backend databases as well.
B<NOTE>. PSGI application did not tested.
=head1 HELPERS
L<Mojolicious::Plugin::Minion::Workers> enable all helpers through
base plugin L<Mojolicious::Plugin::Minion>,
thus you dont need apply base plugin (auto register).
=head1 METHODS
L<Mojolicious::Plugin::Minion::Workers> inherits all methods from
L<Mojolicious::Plugin::Minion> and override the following new ones.
=head2 register
$plugin->register(Mojolicious->new, <config hashref>);
Register plugin in L<Mojolicious> application.
=head1 SEE ALSO
L<Mojolicious::Plugin::Minion>, L<Minion>, L<Mojolicious::Guides>, L<https://mojolicious.org>.
=head1 AUTHOR
Михаил Че (Mikhail Che), C<< <mche[-at-]cpan.org> >>
=head1 BUGS / CONTRIBUTING
Please report any bugs or feature requests at
Pull requests also welcome.
=head1 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.
=cut