2014-12-28 4 views
1

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

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

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

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

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

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

+0

Так что я, возможно, понял это, хотя я хотел бы кто-то отбивать, если это не правильно. При очистке кеша теперь я запускаю «кэш приложений/консолей php: clear --no-warmup», причем разница заключается в опции -no-warmup. Для перезагрузки моих приборов я создал скрипт, который сначала экспортирует переменные среды (по умолчанию), а затем перезагружает мои светильники. Является ли это правильным способом хранения переменных среды? Благодарю. – Dbl0McJim

ответ

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 } 

EDIT

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

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

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

+0

Извините, но мне нужно, чтобы переменная поступала с определенного виртуального хоста, так как будет несколько входящих вызовов с разных хостов. Однако, спасибо. – Dbl0McJim

+0

Так почему бы вам просто не воспользоваться чтением запроса? Можете ли вы привести пример такой переменной? Я обновил свой ответ в соответствии с вашими комментариями. –

+0

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

0

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

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

Использование

Для командной строки, в любое время я запустить команду Symfony I Источник мое окружение (этот пример для Баш оболочки)

$ . ./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 

Поэтому каждый из моих сред (производство, контроль качества, этап, тест, Dev, localdev) будут иметь эти два файла. И они могут меняться всякий раз, не вдаваясь в код. В Symfony вы бы получить доступ к этим переменной как

%app_user% 
%app_pass% 
Смежные вопросы