使用 Dancer 在何处存储全局可访问的变量
Where to store globally accessible variables using Dancer
我想将变量存储在一个配置文件中,这样我就可以将它们设置在一个地方并在需要时访问它们。
在 Dancer 应用程序中放置此类变量的位置在哪里,我如何访问它们?
最好的方法是拥有一个具有默认全局设置的 config.yml 文件,如下所示:
# appdir/config.yml
logger: 'file'
layout: 'main'
您的问题:如何访问?
答案:Dancer 应用程序可以使用 'config' 关键字轻松访问其配置文件中的设置,例如:
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 Web 应用程序所在的位置。 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
我想将变量存储在一个配置文件中,这样我就可以将它们设置在一个地方并在需要时访问它们。
在 Dancer 应用程序中放置此类变量的位置在哪里,我如何访问它们?
最好的方法是拥有一个具有默认全局设置的 config.yml 文件,如下所示:
# appdir/config.yml
logger: 'file'
layout: 'main'
您的问题:如何访问?
答案:Dancer 应用程序可以使用 'config' 关键字轻松访问其配置文件中的设置,例如:
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 Web 应用程序所在的位置。 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