如何在 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
如果我想启动 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