Как передать параметр командной строки в приложении Perl Dancer, выполняемом с помощью plackup - PullRequest
2 голосов
/ 13 июля 2020

Если я хочу запустить приложение Perl Dancer, мне нужно выполнить следующую команду:

perl app.psgi

Если я хочу передать параметр приложению и получить к нему доступ внутри сценария из @ ARGV, я могу сделать это так:

perl app.psgi --option1 --option2

Я могу запустить это приложение, используя также «plackup», однако я не могу передать параметры, например, когда я запускаю скрипт с использованием Perl. Массив параметров @ARGV пуст.

Что делать? Как передать параметры командной строки в сценарий «app.psgi», запущенный с «plackup»?

Ниже приведен пример того, как сценарий выглядит примерно так:

#!/usr/bin/env perl


use Dancer2;
use Data::Dumper;
use MIME::Base64 qw( encode_base64 );

use POSIX;

my $system = shift @ARGV || 'default_system';

print "SYSTEM: $system\n";

my $host = '127.0.0.1';
my $port = 5000;

set host => $host;
set port => $port;

get '/expenses' => sub {
    my %params = params;
    return to_json {status => 'OK'};
};

post '/expenses' => sub {
    my %params = params;
    return to_json {status => 'OK'};
};


dance;

1 Ответ

3 голосов
/ 13 июля 2020

Похоже, что plackup запускает приложение в среде песочницы где @ARGV стирается.

Вы все равно можете попробовать использовать переменные среды вместо аргументов в командной строке. Например, используя MY_SYSTEM в качестве примера:

#!/usr/bin/env perl
use Dancer2;
use Data::Dumper;
use MIME::Base64 qw( encode_base64 );
use POSIX;

print "SYSTEM: $ENV{MY_SYSTEM}\n";
# [...]

, а затем запустите приложение, используя:

$ MY_SYSTEM=Foo plackup app.psgi
...