Symfony2 Где сохранить переменные среды

Я видел множество учебников по настройке виртуального хоста Apache2 с переменными среды и использованию этих переменных в качестве параметра на сайте. Однако проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю кэш приложения / консоли php: очистить или перезагрузить мои данные, я получаю следующую ошибку:
Вы запросили несуществующий параметр …

Если я сначала экспортирую параметр до перезагрузки своих приборов, ошибка исчезнет, ​​когда установлена ​​переменная окружения. Это имеет смысл, так как эта функция не использует Apache для выполнения и требует установки переменной окружения. Но это не решает мою проблему, когда я очищаю кэш вручную.

Итак, мой вопрос: где я на самом деле хочу сохранить эти переменные среды?

Я хотел бы хранить специфичную для сайта информацию, которая зависит от того, какой виртуальный хост используется.

Я мог бы сохранить их в моем файле bash ~ / .profile, но это не имеет особого смысла, и вся прочитанная мной документация просто говорит о сохранении на виртуальном хосте (для Apache). Но ни в одном из этих документов не упоминается о выполнении сценариев вне веб-браузера для доступа к сайту, таких как перезагрузка приборов, запуск миграций или очистка кэша, что является проблемой только при развертывании моего источника.

Большое спасибо за любую помощь.

1

Решение

Вы можете поместить переменные приложения в app/config/config.yml, Вы можете положить туда:

parameters:
your.parameter.1: value1
your.parameter.2: value2

Если вы используете какую-либо систему контроля версий, вы можете исключить эти переменные в отдельный файл и игнорировать этот файл в репозитории контроля версий. Вы также должны включить этот файл в config.yml. Например, если вы положили вышеупомянутые переменные в app/config/example.yml тогда вы должны добавить в app/config/config.yml:

imports:
- { resource: example.yml }

РЕДАКТИРОВАТЬ

Вы всегда можете поставить параметры следующим образом:

parameters:
domain1:
param1: value1
param2: value2
domain2:
param1: value1
param2: value2
domain3:
param1: value1
param2: value2

а затем прочитайте эти переменные в местах, где вы хотите использовать их в соответствии с текущим доменом, или вы также можете установить службу, которая устанавливает общие переменные в соответствии с текущим доменом. Для командной строки вы можете использовать значения по умолчанию.

1

Другие решения

Так что, поскольку эта ситуация — моя любимая мозоль, я призываю вас не помещать информацию о среде в конфигурационный файл. Итак, нужны два файла, которые должны синхронизироваться. Один файл будет для командной строки, а другой — для переменных среды Apache (или HTTP-сервер по вашему выбору)

CL: /var/www/applications/coolapp/coolapp.sh
Apache: /var/www/applications/coolapp/coolapp.apache.conf

Для командной строки, каждый раз, когда я запускаю команду Symfony, я создаю исходную среду (этот пример для оболочки bash)

$ . ./coolapp.sh
$ app/console cache:clear

В конфиге Apache для сайта я добавляю такие как
/etc/httpd/conf.d/coolapp.local.conf

<VirtualHost coolapp.local:443>
...
Include /var/www/applications/coolapp/coolapp.apache.conf
...
</VirtualHost>

Что находится в этих файлах?

coolapp.sh будет содержать что-то вроде

export SYMFONY__APP_USER = foo
export SYMFONY__APP_PASS = foobar01

и coolapp.conf будет иметь

SetEnv SYMFONY__APP_USER fop
SetEnv SYMFONY__APP_PASS foobar01

Таким образом, каждая из моих сред (production, qa, stage, test, dev, localdev) будет иметь эти два файла. И они могут быть изменены в любое время, не вдаваясь в код.
В Symfony вы можете получить доступ к этим переменным, как

%app_user%
%app_pass%
0

По вопросам рекламы [email protected]