Jestem nowy dla Dancer, ale próbuję skonfigurować go do pracy w kontenerze Docker. W rezultacie muszę pobrać moje ustawienia bazy danych ze środowiska.Skonfiguruj Dancer ze zmiennych środowiskowych?
W moim przypadku mam DB_PORT_3306_TCP_ADDR
i DB_PORT_3306_TCP_PORT
pochodzących z Docker. Niestety, moduł Dancer::Plugin::Database
jest błędny, zanim mogę zmienić bazę danych, aby używać tych zmiennych.
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},
});
}
Pytanie brzmi, czy istnieje dobry sposób na skonfigurowanie Dancer ze zmiennych środowiskowych zamiast przez statyczny YAML?
Wielka obserwacja, i masz rację. Jednakże, jeśli zrobię tak, jak sugeruje twój kod, 'database-> quick_select (...)' '' '' '' not can be call method "quick_select" na undefined'. Czy nie ma sposobu na utrzymanie "bazy danych" globalnej? –
Kopiowanie kodu 'Dancer :: Plugin :: Database :: Core', wygląda na to, że możesz uzyskać ten sam uchwyt połączenia podczas kolejnych wywołań do' bazy danych ', przekazując ten sam skrót ustawień: "Klucz do użycia do przechowaj ten uchwyt w '% handles' .To będzie nazwa podana do' database() ', hashref dostarczone do' database() '(tak długo jak ten sam hashref jest przekazywany, ten sam uchwyt będzie być ponownie użyty) lub '$ def_handle', jeśli' database() 'jest wywoływana bez argumentów" Niestety, omijanie hashref ustawień tak naprawdę nie różni się od przekazywania uchwytu bazy danych. – ThisSuitIsBlackNot
Możesz bawić się dodając ustawienia połączenia do 'config' i śledząc je tam: [Dostęp do informacji konfiguracyjnych z twojej aplikacji] (https://metacpan.org/pod/Dancer::Cookbook#Accessing-configuration-information -z-twojej-aplikacji). Lub po prostu tworzenie wrappera dla funkcji 'database', która przechodzi we właściwych ustawieniach. – ThisSuitIsBlackNot