Директории
Материал из Eludia.
В этой статье изложена стандартная структура директорий Eludia-приложений. API Eludia.pm всюду предполагает, что файлы расположены и именуются так, как описано здесь.
Список директорий
Все файлы, относящиеся к инсталляции одного Eludia-приложения, всегда располагаются в одной директории. Ниже названия разделов соответствуют относительным путям подкаталогов и файлов в одной такой директории приложения.
conf
Директория с конфигурацией данной инсталляции приложения. Должна быть вне поля зрения средств версионного контроля (во всяком случае, общих с кодом приложения).
conf/httpd.conf
Конфигурационный файл формата, пригодного для использования Apache 1.x или 2.x. Содержит Perl-секцию, которая играет роль загрузочного скрипта. Используется приложением вне зависимости от того, какой WEB-сервер обслуживает HTTP-запросы: Apache/mod_perl или какой-либо иной (для не-Apache серверов разборо httpd.conf Eludia.pm осуществляет самостоятельно).
lib
Здесь располагаются исходные тексты библиотек, реализующих бизнес-логику приложения. Версионный контроль должен распространяться на неё полностью.
lib/Config.pm
Файл с конфигурацией приложения. Содержит:
- строки подключения (use) для внешних Perl-модулей;
- определение переменной $conf;
- код процедур, доступных всюду в приложении.
lib/Model
Директория с файлами, имена которых соответствуют именам таблиц БД, а содержимое составляет описание схемы данных.
lib/Updates
Директория с автоматически вызываемыми одноразовыми скриптами обновления БД.
lib/Content
Директория с файлами, имена которых соответствуют типам экранов, а содержимое описывает процедуры извлечения и обработки данных. Подробнее об именах процедур см. handler.
lib/Presentation
Директория с файлами, имена которых соответствуют типам экранов, а содержимое описывает процедуры генерации HTML. Подробнее об именах процедур см. handler.
lib/Presentation/templates
Директория с шаблонами, используемыми процедурой fill_in_template для интерполяции в процессе печати офисных документов или рассылки e-mail.
lib/offline
Директория с offline-скриптами.
разбиение lib по разделам
В относительно простых, а также унаследованных приложениях вышеописанные файлы и директории (Config.pm, Model и т. д.) располагаются непосредственно под lib. Однако с некоторых пор Eludia.pm поддерживает разбиение монолитной lib на множество поддиректорий, посвящённых различным подсистемам. При этом один из таких подкаталогов обязательно называется lib/_, а имена прочих состоят из символа '_', за которым следует тематический префикс. Имена всех файлов в таких "прочих" директориях должны начинаться с этого префикса, а в lib/_ могут лежать любые файлы. При этом поддиректория с префиксом используется только в рамках запроса на тип экрана с соответствующим префиксом.
Рассмотрим пример: приложение, в котором выделены разделы, посвящённые кадровому учёту и информационным технологиям. Назначим им префиксы 'hr' и 'it' соответственно. Тогда директория lib будет содержать 3 поддиректории: '_', '_hr' и '_it'. Традиционные типы экранов ('log', 'users' и т. п.) будут располагаться в lib/_ (в частности, файлы lib/_/Content/log.pm, lib/_/Model/users.pm, и т. д.), специфически кадровые — в lib/_hr (например, lib/_hr/Presentation/hr_orders.pm), а информатизаторские — в lib/_it (lib/_it/Model/it_servers.pm и прочее подобное).
Для запросов с типами 'hr_...' в поле зрения ядра будут попадать директории 'lib/_hr' и 'lib/_', для типов 'it_...' — 'lib/_it' и 'lib/_', для всех прочих — только 'lib/_'.
При этом файлы Config.pm, Content/menu.pm и Menu/* ищутся и в директории с префиксом (если такая есть), и всегда в 'lib/_'. Поиск не останавливается на первом обнаруженном файле. Если, скажем, одновременно окажутся обновленными lib/_/Content/menu.pm и lib/_hr/Content/menu.pm, то для экрана с типом 'hr_orders' будут перезагружены оба.
docroot
"Корневой каталог" приложения с точки WEB-сервера. Версионный контроль должен распространяться на эту директорию с некоторыми исключениями.
docroot/i
Директория статических файлов.
docroot/i/upload
Директория для постоянного хранения файлов, загруженных через WEB-интерфейс (в том случае, если они хранятся не в БД). Версионный контроль здесь должен быть отключён. Если система не предполагает прямой выдачи файлов (как иллюстраций в HTML), эту директорию имеет смысл закрыть от прямого доступа, так как с использованием функций типа sql_download_file можно обеспечить контроль доступа на уровне приложения.
docroot/i/_skins
Автоматически создаваемая директория, в которой содержится статика, соответствующая $_SKIN'ам. Картинки, CSS и js копируются сюда при каждой загрузке Eludia.pm. Версионный контроль здесь должен быть отключён.
docroot/i/skins
Если эта директория существует, то её содержимое переписывается поверх docroot/i/_skins при каждой загрузке ядра. Она предназначена для того, чтобы локально переопределять для данного приложения статические файлы, относящиеся я ядру. В отличие от docroot/i/_skins, эта директория является частью кода приложения и должна находиться под версионным контролем.
docroot/i/_mbox
Автоматически создаваемая директория, в которой откладываются ссылки на актуальные мгновенные сообщения для пользователей.
docroot/i/_mbox/by_user
Автоматически создаваемая директория, в которой откладываются JSON-файлы, хранящие мгновенные сообщения для пользователей.
docroot/dbm
Автоматически создаваемая директория для хранения файлов с контрольными суммами. Это служебная информация, по соображениям эффективности хранимая ядром вне БД. Потеря этих данных несущественна для системы. Максимальный возможный ущерб: замедление работы на краткий период, после которого они воссоздаются автоматически. Поэтому для данной директории не требуется ни хранить резервные копии, ни, тем более, версии.
docroot/session_access_logs
Автоматически создаваемая директория для хранения истории навигации пользователей в рамках сессий. Как и docroot/dbm, содержит файлы, утеря которых не угрожает целостности учитываемых данных.
docroot/templates
Устаревший, но поддерживаемый аналог lib/Presentation/templates
logs
Директория для разнообразных log-файлов, связанных с приложением. Обязательно должна находиться вне версионного контроля. В некоторых конфигурациях (в зависимости от WEB-сервера) выделить access.log и/или error.log данного приложения (VirtualHost) в отдельные файлы не получается.
t
Директория для копий тестовых скриптов. Обязательно должна находиться вне версионного контроля.
Замечания
Типовой файл .gitignore
conf logs t docroot/i/_mbox/ docroot/i/_skins/ docroot/i/upload docroot/dbm/ docroot/session_access_logs/
Список автоматически создаваемых директорий
- docroot/i/_mbox
- docroot/i/_mbox/by_user
- docroot/i/_skins
- docroot/i/upload
- docroot/i/upload/images
- docroot/dbm
- docroot/session_access_logs
