Как я могу создать подкласс команды Minion с помощью getopt? - PullRequest
0 голосов
/ 02 октября 2018

Одна из задач в очереди заданий Minion , которую я использую, требует имени пользователя и пароля.

Я нашел хорошее описание того, как передать параметры в приложение Mojo здесь поэтому я сделал это следующим образом:

package Minion::Command::minion::secure_worker;

use Mojo::Base 'Minion::Command::minion::worker';
use Mojo::Util 'getopt';

sub run {
    my ( $self, @args ) = @_;

    my $worker = $self->app->minion->worker;
    my $status = $worker->status;

    getopt \@args,
    'U|username=s' => \my $username,
    'P|password=s' => \my $password;

    $self->app->credentials->{username} = $username;
    $self->app->credentials->{password} = $password;

    return $self->SUPER::run;
}

1

Однако, когда я пытаюсь передать параметры, которые были в исходной рабочей команде, такие как -j, я получаю:

Unknown option: j

Почему это?Похоже, что подклассы команды не работают, или что getopt все портит?

1 Ответ

0 голосов
/ 02 октября 2018

Звонки на getopt не являются составными.Вы можете попытаться обработать (и затем передать) все параметры, которые также обрабатывает ваш суперкласс, или вызвать Getopt :: Long самостоятельно с параметром pass_through.Это игнорирует все неизвестные опции:

package Minion::Command::minion::secure_worker;

use Mojo::Base 'Minion::Command::minion::worker';
use Getopt::Long 'GetOptionsFromArray';
use Getopt::Long ':config', 'pass_through';

sub run {
    my ( $self, @args ) = @_;

    my $worker = $self->app->minion->worker;
    my $status = $worker->status;

    GetOptionsFromArray \@args,
    'U|username=s' => \my $username,
    'P|password=s' => \my $password;

    $self->app->credentials->{username} = $username;
    $self->app->credentials->{password} = $password;

    return $self->SUPER::run;
}

1
...