从环境变量配置Dancer?

Jac*_* M. 6 perl dancer docker

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

在我的情况下,我有DB_PORT_3306_TCP_ADDR,DB_PORT_3306_TCP_PORT来自Docker.不幸的是,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},
    });
}
Run Code Online (Sandbox Code Playgroud)

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

Thi*_*Not 5

请参见运行时配置Dancer::Plugin::Database文档:

您可以将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},
    });
}
Run Code Online (Sandbox Code Playgroud)