0

Config::Anyを使用したConfig::Generalセットアップで環境変数を補間するにはどうすればよいですか。これは私のOXアプリケーションから取得した構成スニペットです。環境変数を認識できないことを除いて、罰金で指定されたデータを返します。.conf

has config => (
  isa          => 'HashRef',
  is           => 'ro',
  lifecycle    => 'Singleton',
  dependencies => ['config_file'],
  block        => sub {
    my $s = shift;

    my $cfg
        = load_class('Config::Any')->load_files({
            flatten_to_hash => 1,
            use_ext         => 1,
            files           => [ $s->param('config_file') ],
            General         => {
                -InterPolateEnv => 1,
            },
        });

    return $cfg->{ $s->param('config_file') };
  },
);

ここに私の設定のためのいくつかの試みがあります

<db>
   dsn $PERL_FEEDER_DSN
</db>

<db>
   dsn $ENV{PERL_FEEDER_DSN}
</db>

これらは両方とも、リテラルを含む dsn で終わるだけ$...です。

以前にこれを行ったことがありますが、どのように行ったのか、または何が間違っているのかわかりません。

4

1 に答える 1

1

ロードされるように指定-InterPolateEnv => 1する必要があります。私が理解しているように、それ自体はそのモジュールのロードをトリガーしません。そのモジュールが理解するオプションです。-InterPolateVars => 1Config::General::Interpolated-InterPolateEnv => 1

#!/usr/bin/env perl

use strict;
use warnings;
use Config::General;

my $conf = new Config::General(
    -ConfigFile      => 'test.conf',
    -InterPolateEnv => 1,
    -InterPolateVars => 1,
);

use YAML;
print Dump { $conf->getall };

構成ファイル:

<デシベル>
   DSN $PERL_FEEDER_DSN
</db>

出力:

---
デシベル:
  dsn: テスト中
于 2013-03-20T15:07:10.473 に答える