如何在 plackup 执行的 Perl Dancer App 中传递命令行选项

How to pass a command line option in Perl Dancer App executed by plackup

如果我想启动 Perl Dancer 应用程序,我必须 运行 以下命令:

perl app.psgi

如果我想将一个选项传递给应用程序并在脚本中从@ARGV 访问它,我可以这样做:

perl app.psgi --option1 --option2

我可以 运行 这个应用程序也使用“plackup”,但是我无法传递选项,就像我 运行 使用 Perl 脚本一样。 @ARGV 参数数组为空。

我能做什么? 如何将命令行选项传递给从“plackup”启动的“app.psgi”脚本?

下面是脚本的大致样子的文件:

#!/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;

似乎 plackup is running the app in a sandbox environment 正在删除 @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