从环境变量配置Dancer?

时间:2014-11-05 20:31:50

标签: perl docker dancer

我是Dancer的新手,但我尝试将其配置为在Docker容器中工作。因此,我需要从环境中获取数据库设置。

在我的情况下,我有来自Docker的DB_PORT_3306_TCP_ADDRDB_PORT_3306_TCP_PORT。不幸的是,在我可以更改数据库以使用这些变量之前,Dancer::Plugin::Database模块是错误的。

use Dancer ':syntax';
use Dancer::Plugin::Database;

if ($ENV{DB_PORT_3306_TCP}) {## Connected via docker.
    database->({
        driver => 'mysql',
        username => 'username',
        password => 'password',
        host => $ENV{DB_PORT_3306_TCP_ADDR},
        port => $ENV{DB_PORT_3306_TCP_PORT},
        database => $ENV{DB_ENV_MYSQL_DATABASE},
    });
}

所以问题是,是否有一种从环境变量配置Dancer的好方法,而不是通过静态YAML?

2 个答案:

答案 0 :(得分:5)

请参阅Dancer::Plugin::Database文档中的Runtime Configuration

  

您可以将hashref传递给database()关键字,以提供配置详细信息,以便在运行时根据需要覆盖配置文件中的任何内容,例如:

     

my $dbh = database({ driver => 'SQLite', database => $filename });

您正在添加->,这会导致错误。以下应该有效:

use Dancer ':syntax';
use Dancer::Plugin::Database;

if ($ENV{DB_PORT_3306_TCP}) {## Connected via docker.
    database({
        driver => 'mysql',
        username => 'username',
        password => 'password',
        host => $ENV{DB_PORT_3306_TCP_ADDR},
        port => $ENV{DB_PORT_3306_TCP_PORT},
        database => $ENV{DB_ENV_MYSQL_DATABASE},
    });
}

答案 1 :(得分:0)

lib / myapp.pm 的开头,加载模块后,添加:

setting('plugins')->{'Database'}->{'host'}='postgres';
setting('plugins')->{'Database'}->{'database'}=$ENV{POSTGRES_DB};
setting('plugins')->{'Database'}->{'username'}=$ENV{POSTGRES_USER};
setting('plugins')->{'Database'}->{'password'}=$ENV{POSTGRES_PASSWORD};

并在 config.yml

中保留静态配置(驱动程序,端口)