【问题标题】:How to pass a command line option in Perl Dancer App executed by plackup如何在由 plackup 执行的 Perl Dancer App 中传递命令行选项
【发布时间】:2020-07-13 06:44:38
【问题描述】:

如果我想启动一个 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;

【问题讨论】:

  • 你的app.psgi 脚本看起来怎么样?
  • 我添加了一个与我使用的脚本相似的脚本。
  • 根据Plack::Util中的line 118看来@ARGV在从plack运行时被清除

标签: perl dancer plack


【解决方案1】:

似乎plackup 正在运行应用程序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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-09
    • 2015-04-16
    • 2023-03-03
    • 2018-04-07
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多