Язык отображения:   ru  en

Различия

Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.

ru:base:services 2006/11/16 10:16 ru:base:services 2006/11/20 12:00 текущий
Строка 8: Строка 8:
Также в меню //actions// можно видеть раздел //filegens//. //Filegens// это темплейты всех файлов, которые заливаются на сервер.\\ Также в меню //actions// можно видеть раздел //filegens//. //Filegens// это темплейты всех файлов, которые заливаются на сервер.\\
== Filegens == == Filegens ==
-//Filegens// представляют из себя простой способ генерации любых конфигов прямо из базы, без написания лишнего кода. Для этого используется специально подготовленный //perl-hash//, называемый //datasource//. Его структура аналогична структуре базы.\\+//Filegens// (генераторы) представляют из себя простой способ генерации любых конфигов прямо из базы, без написания лишнего кода. \\
Рассмотрим самый простой пример, генерация конфига //vhosts.conf// для веб-сервера apache.\\ Рассмотрим самый простой пример, генерация конфига //vhosts.conf// для веб-сервера apache.\\
-Для этого мы используем datasource //hosts_accounts//, в котором содержиться вся необходимая информация.\\ +Идем в //base/services//, добавляем к сервису webserver новый генератор test. \\
-Идем в //base/filegens/add//\\+
//**Name**// - это имя //filegen//. При перестройке сервисов порядок вызова генератора определяется им.\\ //**Name**// - это имя //filegen//. При перестройке сервисов порядок вызова генератора определяется им.\\
-//**Datasource**// - подходящий datasource. В нашем случае hosts_accounts.\\ +//**Filename**// - имя файла, куда будет сохраняться результат работы генератора. Если тип генератора //скрипт// и Filename не заполнено, используется временный файл, который потом удаляется \\
-//**Service**// - к какому сервису будет привязан данный filegen, то есть при ребилде какого сервиса он будет активироваться и заливать свой генерированный файл.\\ +
-//**Filename**// - имя файла, куда будет сохраняться //filegen//. Если тип генератора //скрипт// и Filename не заполнено, используется временный файл, который потом удаляется \\ +
-//ln -s /etc/apache/vhosts.conf /opt/dedikit/fs/etc/apache/vhosts.conf//\\+
//**Start mark**// - если файл необходимо встраивать внутрь другого, то это отметка начала генерированной секции. Необходимо оставлять это поле пустым, если нужно заменять файл.\\ //**Start mark**// - если файл необходимо встраивать внутрь другого, то это отметка начала генерированной секции. Необходимо оставлять это поле пустым, если нужно заменять файл.\\
//**End mark**// - аналогично //Start mark//. Не используется, если //Start mark// не определен.\\ //**End mark**// - аналогично //Start mark//. Не используется, если //Start mark// не определен.\\
Строка 33: Строка 29:
  ServerAlias <TMPL_LOOP aliases_loop><TMPL_VAR alias> </TMPL_LOOP> # one more embedded loop   ServerAlias <TMPL_LOOP aliases_loop><TMPL_VAR alias> </TMPL_LOOP> # one more embedded loop
-  DocumentRoot <TMPL_VAR GLOBAL_clients_home>/<TMPL_VAR accounts_loop.login>/domains/<TMPL_VAR name>/html # LOOK, HERE IS backreference and globals vars!+# здесь используется backreferences и переменные из настроек 
 +  DocumentRoot <TMPL_VAR GLOBAL_clients_home>/<TMPL_VAR accounts_loop.login>/domains/<TMPL_VAR name>/html  
</VirtualHost> </VirtualHost>
Строка 50: Строка 48:
Параметром может быть цикл, тогда он содержит поддерево данных, типа {//accounts_loop//}{//$account_id//}{//hosts_loop//}{$//host_id//}{//name//}.\\ Параметром может быть цикл, тогда он содержит поддерево данных, типа {//accounts_loop//}{//$account_id//}{//hosts_loop//}{$//host_id//}{//name//}.\\
В примере с //apache_vhosts.conf// это видно на //hosts_loop// и //aliases_loop//.\\ В примере с //apache_vhosts.conf// это видно на //hosts_loop// и //aliases_loop//.\\
-Особый пример представляет строка //DocumentRoot//, в которой используется сразу два приема, //backreference// и //GLOBAL//.\\+Особый пример представляет строка //DocumentRoot//, в которой используется сразу два приема, //backreference// и доступ к переменным из //настроек//.\\
//**backreference**// - это переменная, **НЕ ЛЕЖАЩАЯ** в текущей вложенности цикла. Как пример, мы приводим //accounts_loop.login//, который в //hosts_loop// не виден, так как хранится в //accounts_loop// (внешнем цикле).\\ //**backreference**// - это переменная, **НЕ ЛЕЖАЩАЯ** в текущей вложенности цикла. Как пример, мы приводим //accounts_loop.login//, который в //hosts_loop// не виден, так как хранится в //accounts_loop// (внешнем цикле).\\
//**GLOBAL**// - способ обратиться к переменным в //configure//. Убирается из имени //GLOBAL_// и вытаскивается переменная.\\ //**GLOBAL**// - способ обратиться к переменным в //configure//. Убирается из имени //GLOBAL_// и вытаскивается переменная.\\
-== Деление темплейта на куски. == +== Использование нескольких одинаковых циклов. === 
-Иногда необходимо сделать группу конфигурационных файлов. Как пример можно привести файлы зон //named// или виртуальных хостов //apache//. Самый простой способ деления - вставлять в темплейт метки начала деления //DK_CUT_HERE//. Пример: создаем файлы вирутальных хостов //apache//, по файлу на виртхост:\\+В случае, если нужно использовать в одном уровне вложенности несколько одинаковых циклов применяется следующий путь: \\ 
 +Пример (два цикла accounts_loop рядом): \\
<code> <code>
-DK_NEW_FILE etc/vhosting/apache/conf.d/+Accounts: <TMPL_LOOP accounts_loop><TMPL_VAR login> </TMPL_LOOP> 
 +Hosts: <TMPL_LOOP accounts_loop><TMPL_LOOP hosts_loop><TMPL_VAR name> </TMPL_LOOP></TMPL_LOOP> 
 +</code> 
 +работать **НЕ БУДЕТ**, так как в темплейте два одинаковых внешних цикла accounts_loop и система будет пытаться присвоить переменные от одного цикла другому, что будет вызывать ошибку. \\ 
 +Обходной путь - использовать номера в имени цикла. \\ 
 +Правильный пример: \\ 
 +<code> 
 +Accounts: <TMPL_LOOP accounts_loop><TMPL_VAR login> </TMPL_LOOP> 
 +Hosts: <TMPL_LOOP 2_accounts_loop><TMPL_LOOP hosts_loop><TMPL_VAR name> </TMPL_LOOP></TMPL_LOOP> 
 +</code> 
 +Обратите внимание, что во втором случае вместо accounts_loop стоит 2_accounts_loop - будет браться цикл accounts_loop, но не возникнет коллизии имен. \\ 
 + 
 +== Генерация нескольких файлов из одного темплейта. == 
 +Иногда необходимо сделать группу конфигурационных файлов. Как пример можно привести файлы зон //named// или виртуальных хостов //apache//. Самый простой способ деления - вставлять в темплейт метки начала деления //DK_NEW_FILE//. Пример: создаем файлы вирутальных хостов //apache//, по файлу на виртхост:\\ 
 +<code> 
 +DK_NEW_FILE /usr/local/apache/conf.d/<TMPL_VAR name>.conf 
 + 
 +  ServerName <TMPL_VAR name> 
 +  ServerAlias <TMPL_LOOP aliases_loop><TMPL_VAR alias> </TMPL_LOOP> # one more embedded loop 
 + 
 +DocumentRoot <TMPL_VAR domain_htdocs_dir> # domain_htdocs_dir изменяется при каждой итерации цикла hosts_loop
-ServerName  
-ServerAlias  
-DocumentRoot //domains//html 
</code> </code>
-//DK_NEW_FILE// дает команду системе обработки темплейтов создать файл с именем, идущим после //DK_NEW_FILE// (//etc/vhosting/apache/conf.d/// в данном случае) и с содержимым от текущей метки до следующей или конца темплейта.+//DK_NEW_FILE// дает команду системе обработки темплейтов создать файл с именем, идущим после //DK_NEW_FILE// (/usr/local/apache/conf.d/<TMPL_VAR name> в данном случае) и с содержимым от текущей метки до следующей или конца темплейта.
метка //DK_NEW_FILE// должна находится в начале строки.\\ метка //DK_NEW_FILE// должна находится в начале строки.\\

Personal Tools