perl - 如何在 plackup 执行的 Perl Dancer 应用程序中传递命令行选项

标签 perl dancer plack

如果我想启动 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正在运行应用程序 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 - 如何在 plackup 执行的 Perl Dancer 应用程序中传递命令行选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62870530/

相关文章:

perl - 带有Perl的excel文件中的列标题

perl - 这个Perl子程序中 `use vars`有什么意义?

regex - 为什么在我的正则表达式模式中使用 POSIX 字符类会产生意想不到的结果?

perl - 使用 Plack 处理多个文件上传

multithreading - Perl线程共享数据

所有请求的 Perl Dancer index.cgi

node.js - 用于小型应用程序的 Perl Dancer 或 Node.js

perl - Dancer2::Plugin::Redis中 'retry'和 'every'配置参数的意义是什么

multithreading - 如何在后台运行 Plack 请求处理程序?

perl - 窥探不同 plack 中间件之间的 http header