Русские документы
Ежедневные компьютерные новости RSS rusdoc.ru  Найти :
http://www.rusdoc.ru. Версия для печати.

Запуск проекта на разных хостах

Раздел: Programming / Вебмастеру @ 27.11.2008 | Ключевые слова: конфигурация проект настройки командная работа

Автор: dm9
Источник: habrahabr

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

Сложность здесь в том, что разное окружение (доступ к БД, расположение файлов и проч.), будучи «жестко» прописанным в файле конфигурации, заставляет нас постоянно этот файл править. Кроме того, файлы настроек часто заливаются в репозиторий, и после очередного обновления кода у вас всё перестаёт работать.

Для решения проблемы я использовал два метода.

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

Примерно так выглядел мой XML-конфиг (то, что это XML, не важно — суть та же для любого типа конфигурации).

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <!-- You can set just ip or host without "www." -->
  <server ip="127.0.0.1" host="localhost">
    <!-- Database params -->
    <param name="db_host">dm9</param>
    <param name="db_port">3307</param>
    <param name="db_user">root</param>
    <param name="db_pass">123</param>
    <param name="db_name">dm9_idsrv</param>
    …
  </server>
  <server ip="12.34.56.78" host="my-production-host.ru">
    …


Недостатков у этого метода было 2:
— у разных разработчиков (с разными параметрами окружения) может быть одинаковый хост — скажем, localhost;
— кроме того, при смене или добавлении хоста приходится править файл.

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

Установка переменной окружения проста. Для Апача достаточно добавить строку ‘setEnv DEV_HOST DM9’ в httpd.conf, чтобы создать переменную окружения DEV_HOST, значение которой равно DM9 (имя или ник разработчика). Переменная окружения может быть также установлена отдельно для каждого виртуального хоста. (Кстати, можете подсказать, как это делается под ngix, я добавлю.)

Я предпочитаю устанавливать переменные окружения только для машин, на которых ведётся разработка. Отсутствие такой переменной означает, что мы на «боевом» сервере.

Сейчас мой файл конфигурации (под PHP-проект) выглядит так:

if (isset($_SERVER["DEV_HOST"]) AND $_SERVER["DEV_HOST"] === "DVS") // первый разработчик
{
  $config["db_host"] = "localhost";
  $config["db_user"] = "root";
  $config["db_pass"] = "";
  $config["db_name"] = "xtr_ru";
}
elseif (isset($_SERVER["DEV_HOST"]) AND $_SERVER["DEV_HOST"] === "DM9") // второй разработчик
{
  $config["db_host"] = "localhost";
  $config["db_user"] = "root";
  $config["db_pass"] = "123";
  $config["db_name"] = "xtr";
}
else // рабочий сервер
{
  $config["db_host"] = "localhost";
  $config["db_user"] = "xtr";
  $config["db_pass"] = "some_password";
  $config["db_name"] = "xtr";
}


Опытный читатель заметит, что во всём этом есть один подвох: а как же запускать скрипты из консоли? Это важная задача — например, скрипты нужно уметь запускать планировщиком.

Тут вариантов тоже два — как говорится, на любителя.

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

Вот пример запуска скрипта, на вход которому подаётся имя хоста (содержимое bat-файла, которым я запускаю скрипт из-под Windows):

#clean_something.bat

cd "E:\myproject\utils"
php clean_something.php localhost
pause


(Если Вы используете PHP, параметры, переданные скрипту, можно получить через $_SERVER["argc"] и $_SERVER["argv"].)

Второй вариант — прописать глобальную переменную окружения в операционной системе. В этом случае её не придётся прописывать в файле конфигурации вашего веб-сервера. Под Windows это делается через свойства «Моего Компьютера» (далее закладка Advanced (Подробнее), кнопка Environment Variables (Переменные окружения), далее в разделе System Variables (Системные переменные) кнопка New (Добавить)). Перевод на русский может быть неточным — поправьте, пожалуйста. После этого, скорее всего, придётся перезагрузиться. Под NIX-платформы это делается немного сложнее, и это выходит за рамки данной статьи. Однако, если вы ведёте разработку под Windows, а на NIX выкладывате только релизы, это вам и не понадобится.

Да, почему я пишу эти очевидные для многих строки? Просто мне всё ещё слишком часто приходится работать с проектами, в которых используется один файл конфигурации, не настраиваемый под окружение. Делайте конфиги, которые не надо часто править. Пожалуйста :)


Вернуться в раздел: Programming / Вебмастеру
© Copyright 1998-2012 Александр Томов. All rights reserved.