Я видел множество учебников по настройке виртуального хоста Apache2 с переменными среды и использованию этих переменных в качестве параметра на сайте. Однако проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю кэш приложения / консоли php: очистить или перезагрузить мои данные, я получаю следующую ошибку:
Вы запросили несуществующий параметр …
Если я сначала экспортирую параметр до перезагрузки своих приборов, ошибка исчезнет, когда установлена переменная окружения. Это имеет смысл, так как эта функция не использует Apache для выполнения и требует установки переменной окружения. Но это не решает мою проблему, когда я очищаю кэш вручную.
Итак, мой вопрос: где я на самом деле хочу сохранить эти переменные среды?
Я хотел бы хранить специфичную для сайта информацию, которая зависит от того, какой виртуальный хост используется.
Я мог бы сохранить их в моем файле bash ~ / .profile, но это не имеет особого смысла, и вся прочитанная мной документация просто говорит о сохранении на виртуальном хосте (для Apache). Но ни в одном из этих документов не упоминается о выполнении сценариев вне веб-браузера для доступа к сайту, таких как перезагрузка приборов, запуск миграций или очистка кэша, что является проблемой только при развертывании моего источника.
Большое спасибо за любую помощь.
Вы можете поместить переменные приложения в 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
а затем прочитайте эти переменные в местах, где вы хотите использовать их в соответствии с текущим доменом, или вы также можете установить службу, которая устанавливает общие переменные в соответствии с текущим доменом. Для командной строки вы можете использовать значения по умолчанию.
Так что, поскольку эта ситуация — моя любимая мозоль, я призываю вас не помещать информацию о среде в конфигурационный файл. Итак, нужны два файла, которые должны синхронизироваться. Один файл будет для командной строки, а другой — для переменных среды 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%