Próbuję uruchomić moją aplikację symfony2 na elastycznej fasoli. Próbuję uzyskać zmienne środowiskowe (RDS_USER, RDS_PASSWORD, etc ...) w moim parameters.yml, aby uzyskać referencje bazy danych.
Chodzi o to, że symfony2 potrzebuje zmiennych środowiskowych, które mają być poprzedzone prefiksem przez SYMFONY__
, więc mogłem uzyskać te zmienne bez prefiksów?Pobierz zmienne środowiskowe w pliku symfony2 parameters.yml
Odpowiedz
można załadować pliku php jako zasób:
# app/config/config.yml
imports:
- { resource: parameters.php }
A stamtąd to proste:
// app/config/parameters.php
$container->setParameter('rds.user', getenv('RDS_USER'));
// if set via apache SetEnv use:
//$container->setParameter('rds.user', apache_getenv('RDS_USER'));
UPDATE: Od oryginalnej odpowiedzi, nowe rozwiązanie zostało przewidziane (dzięki @darragh-enright za wskazanie) przy użyciu funkcji env-map
komponentu incenteev-parameters
w composer.json
.
"extra": {
"incenteev-parameters": {
"file": "app/config/parameters.yml",
"env-map": {
"database_host": "RDS_HOSTNAME",
"database_port": "RDS_PORT",
"database_name": "RDS_DB_NAME",
"database_user": "RDS_USERNAME",
"database_pass": "RDS_PASSWORD"
}
}
}
Każdy odwzorowany parametr zostanie zastąpiony wartością ze zmiennej środowiskowej. Aby uzyskać więcej informacji na temat env-map
, zobacz documentation.
Czy mogę użyć getenv() w samym pliku yml? zamiast ładować go z zasobu? – kapitanluffy
Nie, nie możesz. Aby korzystać z funkcji PHP, musisz dołączyć zasoby PHP. –
Wystarczy dać wyraźny przykład, że pracuje dla mnie, używam zarówno parameters.yml
i parameters.php
w moim pliku konfiguracyjnym (config.yml
):
# app/config/config.yml
imports:
- { resource: parameters.yml }
- { resource: parameters.php }
utrzymywanie parameters.yml
moje domyślne i nadpisanie niektóre z nich w parameters.php
jeśli przynajmniej zmienna RDS znaleziono:
<?php
// app/config/parameters.php
if(getenv('RDS_HOSTNAME'))) {
$container->setParameter('database_host', getenv('RDS_HOSTNAME'));
$container->setParameter('database_port', getenv('RDS_PORT'));
$container->setParameter('database_name', getenv('RDS_DB_NAME'));
$container->setParameter('database_user', getenv('RDS_USERNAME'));
$container->setParameter('database_password', getenv('RDS_PASSWORD'));
}
Nadzieję, że to pomaga.
Moje przeprosiny, ponieważ kwestia ta została już odpowiedział (i znalazłem odpowiedź bardzo pomocny, thanks @ tomas.pecserke i @dubrox!), Ale wykopali wokół trochę więcej i odkryłem alternatywę rozwiązanie, które moim zdaniem warto dodać dla potomności.
W skrócie można dodać env-map
do incenteev-parameters
w composer.json
, aby zmapować dostępne zmienne środowiskowe do parametrów; np:
"extra": {
"incenteev-parameters": {
"file": "app/config/parameters.yml",
"env-map": {
"database_host": "RDS_HOSTNAME",
"database_port": "RDS_PORT",
"database_name": "RDS_DB_NAME",
"database_user": "RDS_USERNAME",
"database_pass": "RDS_PASSWORD"
}
}
}
Jak udokumentowano w Using environment variables to set the parameters:
Na swoim środowisku produkcyjnym, wykorzystując interaktywny wiersz może nie być możliwe podczas wdrażania. W takim przypadku można polegać na zmiennych środowiskowych w celu zapewnienia parametrów. Osiąga się to poprzez zapewnienie mapę między zmiennymi środowiska i parametrów powinni wypełnić [...]
i
Jeśli zmienna jest ustawiona, to jej wartość będzie zawsze zastąpi wartość ustawioną w istniejący plik parametrów.
Właśnie przetestowałem to na nowym wdrożeniu EB i zadziałało. Można to sprawdzić za pomocą lokalnego rozmieszczenia, tak:
rm app/config/parameters.yml
export RDS_HOSTNAME=foo \
RDS_PORT=3306 \
RDS_DB_NAME=bar \
RDS_USERNAME=baz \
RDS_PASSWORD=quux
composer install
Interaktywny szybka pominie wszystkie parametry database_*
, a zostaną one automatycznie wypełniane przez wartości środowiskowych. Wdrożenie. Awesome :)
<?php
// app/config/parameters.php
function setParameter($container, $paramName, array $options, $default = null) {
foreach ($options as $o) {
if (is_string(getenv($o))) {
$container->setParameter($paramName, getenv($o));
return;
}
}
if (! is_null($default)) {
$container->setParameter($paramName, $default);
}
}
setParameter($container, 'database.name', ['RDS_DB_NAME', 'SYMFONY__DATABASE__NAME'], 'DEFAULT');
setParameter($container, 'database.port', ['RDS_PORT', 'SYMFONY__DATABASE__PORT'], '3306');
setParameter($container, 'database.host', ['RDS_HOSTNAME', 'SYMFONY__DATABASE__HOST'], '127.0.0.1');
setParameter($container, 'database.user', ['RDS_USERNAME', 'SYMFONY__DATABASE__USER'], 'root');
setParameter($container, 'database.password', ['RDS_PASSWORD', 'SYMFONY__DATABASE__password'], '');
- 1. pobierz parameters.yml w javascript
- 2. Pobierz zmienne środowiskowe za pomocą kodu C
- 3. Zmienne środowiskowe w PHP
- 4. Zmienne środowiskowe i PHP
- 5. Zmienne środowiskowe JavaScript
- 6. Zmienne środowiskowe Ruby
- 7. Zmienne środowiskowe instancji
- 8. Zmienne środowiskowe NodeJS w Grunt
- 9. Zmienne środowiskowe w symbolicznych linkach
- 10. Tomcat + sprężyna i zmienne środowiskowe
- 11. supervisora zmienne środowiskowe konfiguracja aplikacji
- 12. Czy można ustawić zmienne środowiskowe w pliku projektu .sublime?
- 13. Jak załadować zmienne środowiskowe w konsoli Rails?
- 14. Jak ustawić zmienne środowiskowe w PyCharm?
- 15. Jak odczytywać zmienne środowiskowe w Scali
- 16. Zmienne środowiskowe są buforowane w konfiguracji Rails?
- 17. globalne zmienne środowiskowe w skrypcie powłoki
- 18. Jak wydrukować wszystkie zmienne środowiskowe w TCL?
- 19. Globalne zmienne środowiskowe Jenkins w Jenkinsfile
- 20. Wyświetl zmienne środowiskowe systemu Windows w Cygwin
- 21. Rozwiń zmienne środowiskowe w Qt (odpowiednik getenv)
- 22. Jak ustawić zmienne środowiskowe w usłudze Supervisor
- 23. Jak ustawić zmienne środowiskowe w recepturze Makefile?
- 24. Jak zapewnić C# procesowi.Start rozszerzy zmienne środowiskowe?
- 25. Czy zmienne bambusowe są automatycznie dostępne jako zmienne środowiskowe?
- 26. Gdzie mogę wyświetlać zmienne środowiskowe WebSphere?
- 27. Jak ustawić zmienne środowiskowe bash ze skryptu?
- 28. Jak przekazać zmienne środowiskowe do pytest
- 29. Jak przekazać zmienne środowiskowe do kontenerów Docker?
- 30. Jak uzyskać zmienne środowiskowe z gvim
Cieszę się, że ktoś już zadał to pytanie :) właśnie dlatego uwielbiam SO. dzięki chłopaki. –