使用Dancer存储全局可访问变量的位置

时间:2015-02-28 16:19:24

标签: config dancer

我想在配置文件中存储变量,以便我可以在一个地方设置它们,并在需要时访问它们。

将这些变量放在Dancer应用程序中的位置在哪里,我该如何访问它们?

1 个答案:

答案 0 :(得分:2)

最好的方法是使用一个具有默认全局设置的config.yml文件,如下所示:

# appdir/config.yml
logger: 'file'
layout: 'main'

您的问题:如何访问?

答案:舞者应用程序可以使用'配置'用于轻松访问其配置文件中的设置的关键字,例如:

get '/appname' => sub {
    return "This is " . config->{appname};
};

这样可以简单轻松地将您的应用程序设置保存在一个地方 - 您不必担心自己实现所有这些设置。

您可能希望从网络应用外部访问您的网络应用配置。使用Dancer,您可以使用config.yml中的值和一些其他默认值:

 # bin/script1.pl
    use Dancer ':script';
    print "template:".config->{template}."\n"; #simple
    print "log:".config->{log}."\n"; #undef

请注意,config->{log}应该会在默认支架上导致undef错误,因为您没有加载环境,并且默认的脚手架日志是在环境中定义的,而不是在config.yml中定义的。因此undef

如果你想加载一个环境,你需要告诉Dancer在哪里寻找它。一种方法是告诉Dancer webapp所在的位置。从那里,Dancer会扣除config.yml文件的位置(通常为$ webapp / config.yml)。

# bin/script2.pl
    use FindBin;
    use Cwd qw/realpath/;
    use Dancer ':script';

    #tell the Dancer where the app lives
    my $appdir=realpath( "$FindBin::Bin/..");

    Dancer::Config::setting('appdir',$appdir);
    Dancer::Config::load();

    #getter
    print "environment:".config->{environment}."\n"; #development
    print "log:".config->{log}."\n"; #value from development environment

默认情况下,Dancer加载开发环境(通常是$ webapp / environment / development.yml)。如果要加载默认环境以外的环境,请尝试以下操作:

    # bin/script2.pl
    use Dancer ':script';

    #tell the Dancer where the app lives
    Dancer::Config::setting('appdir','/path/to/app/dir');

    #which environment to load
    config->{environment}='production';

    Dancer::Config::load();

    #getter
    print "log:".config->{log}."\n"; #has value from production environment