Symfony 2-konfiguracja wielu serwerów
Zaczynamy przyjmować Symfony 2 do projektów tutaj w pracy, co jest świetne, ale pracuję nad rozwiązaniem wyzwania, które prawie mam, ale nie do końca.
Symfony traktuje koncepcję środowiska jako osobny tryb runtime na jednym serwerze. Jest to świetne rozwiązanie, ponieważ możesz przełączać się między przestrzeniami uruchomieniowymi z różnymi kontrolerami przednimi (web) lub za pomocą przełącznika env (cli) według kaprysu.
Jednak nasz kod jest wdrażany na wielu serwerach w ramach procesu rozwoju. Każdy ma lokalną maszynę wirtualną, a następnie kod propaguje się poprzez integrację, QA, Staging i wreszcie produkcję.
Tak więc, naszym pojęciem środowiska jest serwer (wirtualny lub fizyczny). Oto cele z tej niestandardowej konfiguracji- utrzymanie funkcjonalności OOTB Symfony w odniesieniu do przełączania środowiska runtime Pozwala na publiczną (tj. kontrolowaną przez programistów) konfigurację na Serwer{[13]]}
- utrzymanie prywatnej (tj. kontrolowanej przez sysad) konfiguracji per-server
- będzie działać zarówno dla web i cli
App / config / parameters.ini
[parameters]
server="int"
A następnie w jądrze załaduj dodatkowy plik konfiguracyjny oparty na tej wartości. Na przykład chciałbym, aby to działało, ale tak nie jest (ponieważ kontener jeszcze nie istnieje na tym etapie)
App/AppKernel.php
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
// Per-server config
$server = $this->getContainer()->getParameter( 'server' );
if ( $server )
{
$loader->load(__DIR__.'/config/server/'.$server.'.yml');
}
}
Umożliwi to użycie pliku typu app / config / server / int.yml , którego programista może użyć do kontrolowania Nie-prywatnych (tj. nie parametrów.ini) konfiguracja wartości.
Dzięki za przeczytanie, i daj mi znać, jeśli coś jest mylące.
EDIT
Dla wyjaśnienia, rzeczy ja Nie mogę używać lub polegać
- *zmienne środowiskowe nix z profilu użytkownika lub poprzez
export
. Dlaczego? Integracja, QA i Staging mogą znajdować się na tym samym pudełku
Wszystko w vhost config (nie będzie działać dla cli)
- statycznie nazwany plik (np. coś o nazwie serwer.ini nie zadziała)
1 answers
Ok, w końcu wiem, co z tym zrobić. Naprawdę po prostu wymaga podstawowej modyfikacji do AppKernel
App/AppKernel.php
public function registerContainerConfiguration(LoaderInterface $loader)
{
// Symfony environment config
$loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
// Load server config, if it exists
$parameters = parse_ini_file( __DIR__.'/config/parameters.ini', true );
if ( $parameters && isset( $parameters['parameters']['server.env'] ) )
{
$serverConfig = __DIR__.'/config/server/'.$parameters['parameters']['server.env'].'.yml';
if ( file_exists( $serverConfig ) )
{
$loader->load( $serverConfig );
} else {
error_log( 'Server config defined, but no config file found. Looked for ' . $serverConfig );
}
}
}
App / config / parameters.ini
[parameters]
# ...
server.env="int"
server.title="Integration"
server.name="Int 1"
A teraz mogę stworzyć %serwer.env%.pliki yml W app/config/server/ w razie potrzeby.
Dzięki tym, którzy to czytali-początkowo myślałem o czymś znacznie bardziej skomplikowanym, co sprawiło, że to proste rozwiązanie stało się przez chwilę niewidoczne ;)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-02 04:17:13