Каков наилучший способ загрузки файлов конфигурации для разных версий одного и того же проекта на одном сервере? - PullRequest
3 голосов
/ 19 мая 2009

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

В папке моего проекта у меня есть файл default.config.ini, который загружается, а затем объединяется с файлом конфигурации для конкретного сайта.

В данный момент код читает переменную окружения PROJECT_CONFIG, которая указывает на конкретный файл конфигурации. Это прекрасно работает для каждого разработчика, работающего на своей машине. Проблема возникает, когда мы перемещаем проект на сервер и хотим иметь три экземпляра одного и того же проекта: Dev, Stage, Live.

Теперь мы больше не можем использовать глобальную переменную env, поскольку она должна отличаться для каждого субдомена (проект настроен как dev.domain.com, stage.domain.com и www.domain.com).

Я рассмотрел преобразование серверной переменной HTTP_HOST в имя env var и использование ее для установки правильной конфигурации (т. Е. Когда пользователь запрашивал страницу на dev.domain.com, код будет искать env var с именем dev_domain_com), но я хотел посмотреть, что делают другие люди и что они рекомендуют.

Буду признателен за любой совет, заранее спасибо

Ответы [ 3 ]

2 голосов
/ 18 января 2010

Идея Дэвида Шмитта самая элегантная. Я видел случай использования $_SERVER['HTTP_HOST'] для определения того, на каком сервере вы находитесь, и соответственно установки пути. Одним из таких случаев может быть, если у вас нет прав на изменение файлов конфигурации виртуального хоста сервера. Например:

<?php
  switch($_SERVER['HTTP_HOST']){
    case 'dev.domain.com':
      $path = '/home/dev_user/project.config.ini';
      break;
    case 'stage.domain.com':
      $path = '/home/stage_user/project.config.ini';
      break;
    case 'www.domain.com':
      $path = '/home/live_user/project.config.ini';
      break;
    default:
      $path = '';
  }
  if(!defined('PROJECT_CONFIG')){
    define('PROJECT_CONFIG', $path);
  }
  unset($path);
?>

Примечание. В зависимости от конфигурации вашего сервера вы можете заменить $_SERVER['HTTP_HOST'] на $_SERVER['SERVER_NAME'].

2 голосов
/ 19 мая 2009

Используйте директиву apache SetEnv , чтобы установить PROJECT_CONFIG в контейнере для настройки доступа к экземпляру приложения:

SetEnv PROJECT_CONFIG /src/dev/app.config.php
0 голосов
/ 18 января 2010

Я думаю, что ваше текущее решение просто отлично. Настройки среды там по какой-то причине. Я видел, как вы работали с крупномасштабными проприетарными CMS, над которыми я работал.

Мне нужно сделать то же самое с наличием сайтов dev / stage / production, которые загружают различные конфигурации и планируют использовать параметры среды, чтобы оно определяло имя хоста как запасной вариант, если не задан параметр env.

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