cvs: единый фаил конфигурации для нескольких серверов.

camka

не самка
cvs: единый фаил конфигурации для нескольких серверов.

- Есть cvs модуль для конкретного проекта.
- Сам же проект бегает в трех экземплярах на 3х различных серверах.

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

config1.php
config2.php
config3.php

Содержание приблизительно такое:

PHP:
define('PATH', '/path/to/some/resource');

$smth = array(
1  => '1',
2  => '2',
)
Но значения, конечно, для каждого конкретного файла разные.
Для подключении конфигурационных файлов на стороне серверов использую линк в виде config.php, который ссылается на нужный для сервера файл. Везде в коде прописано подключение именно config.php, а не config{x}.php, дабы не изменять код для разных серверов.

Так что же получается:

Когда надо добавить, изменить имя, удалить какую-то переменную конфигурации, приходится изменять, все три файла. Плюс каждый сервер имеет не нужные ему копии конфигов для других серверов. Да еще и с линками на cvs не поработаешь, приходится вручную создавать этот config.php

Я подумал, что может ета проблема имеет стандартное решение с помощью каких-то хитростие cvs.

Если кто сталкивался, прошу помощи.

спасибо
 

camka

не самка
Извиняюсь, случайно отослал полунаписаное сообщение.

Сейчас пробую сделать cvs ветки для каждого сервера и общую копию конфига в главной ветке. При этом буду изменять лишь основной конфик и как-то сливать его со всему ветками, но боюсь, что в таком случае будет много конфликтов
 

McLay

PHP5 BetaTeam
А нельзя сделать общий и серверный конфиги? Сначала подключается общий, затем серверный и вносит какие-то изменения для конкретного сервера.
 

camka

не самка
А если $_SERVER['HTTP_HOST'] имеет склонность к редким, но все же, изменениям, каждый раз придется лазить в код.

Хотелось бы решить это на уровне цвс, чтобы было возможно отследить, кот когда и с какого сервера делал изменения в связанном с этим сервером конфигурационном файле.

Плюс, в случае если конфигурационный файл имеет достаточно солидный объем, то в твоем варианте этот объем утраивается (а если серверов больше?), что, хоть и не критически, но уже не так эллегантно.

-~{}~ 30.03.05 17:40:

Автор оригинала: McLay
А нельзя сделать общий и серверный конфиги? Сначала подключается общий, затем серверный и вносит какие-то изменения для конкретного сервера.
Серверные конфиги тоже имеют тенденцию переодически обростать кодом или худеть под ударами безжалостного рефакторинга.
 

McLay

PHP5 BetaTeam
Т.е. ты хочешь, чтоб при изменении структуры конфига пришлось изменять только 1 файл?
 

camka

не самка
По возможности - да.

Потому как особенно сильных изменений там обычно не происходит: Добавили пару констант, удалили одну и т.п.
 

McLay

PHP5 BetaTeam
Тогда кроме написания админки для генерации конфигов у меня никаких мыслей нет. А уж как это сделать с помощью cvs, вообще не представляю :)
 

camka

не самка
Автор оригинала: McLay
А уж как это сделать с помощью cvs, вообще не представляю :)
Представляю, что бы было, если бы все те обитатели этого форума, кто не представляет, как это сделать с помощью cvs, отписались бы в этот топик!
Предлагаю всем отвечать на каждый заданный в этом форуме вопрос, на который не знаешь ответа: "Не представляю, как это сделать". Будет много постов и, соответственно, позитива.
 

McLay

PHP5 BetaTeam
camka, ну желаю успехов :) Только потом напиши как ты это сделаешь, с помощью cvs :)
 

confguru

ExAdmin
Команда форума
camka

CVS - не помогает программировать - это инструмент :)

PHP:
if (isset($_SERVER["SERVER_NAME"])) {
    $SERVER_NAME = $_SERVER["SERVER_NAME"];
} else {$SERVER_NAME=''}
 
switch ($SERVER_NAME) {
    case 'localhost':
    define('SITE_ADMIN_PATH','/projects/xxxx.ru/htdocs/admin/');
    break;
    case xxx..ru':
    break;
}
-~{}~ 30.03.05 21:08:

Серверные конфиги тоже имеют тенденцию переодически обростать кодом
В конфигах не должно быть кода.. :)
 

camka

не самка
Мне не нужно было программирование, мне нужно удобство процесса разработки, поэтому-то и спрашиваю в оффтопике.

А насчет всеми вами любимого switch'а я уже ответил выше.

Вообще сейчас оптимальным решением считаю разделение конфигурационного файла в cvs на несколько веток. В главной ветви держать основной конфиг, а для каждого отдельного сервера отдельную ветку. Тогда, в случае надобности, придется изменять только один файл основной ветки, а файлы из остальных веток обновляем слиянием их с главным. Так легко обновлять все файлы разом. И не надо править код в каждом.

admin
Кстати, в вашем ответе прослеживается противоречие последней фразы и приведенного кода.

А вообще, под кодом я подразумевал декларирование конфигурационных параметров, будь то объявление констант, скалярных переменных, или переменных комплексных типов. Чем же вам не код:
define('CONSTANT', 1);

?
 
Сверху