$preconf
$preconf — это глобальный хэш, содержащий значения параметров, специфические для текущей инсталляции приложения. Как правило, он определяется при загрузке Eludia.pm, в качестве 3-го параметра Eludia::Loader::import, который обычно вызывается из <perl>-секции httpd.conf.
В первых прототипах Eludia.pm все глобальные параметры читались из хэша $conf, причём содержимое $conf, определённое в Config.pm, копировалось поверх $preconf, который мыслился как "предварительная конфигурация" и потому был так назван.
Однако, вскоре выяснилось, что каждый отдельный параметр должен быть определён либо в $preconf, либо в $conf. Так, например, параметры подключения к БД имеют смысл только для одного экземпляра и должны быть только в $preconf, а параметры, задающие логику ядра, могут определяться только в библиотеках приложения.
Итак, на сегодня понятие "предварительная конфигурация" не имеет смысла, однако имя переменной $preconf используется до сих пор.
Ниже приведены параметры глобальной конфигурации, используемые Eludia.pm. В каждом приложении могут быть собственные параметры, также определяемые в $preconf.
БД
- db_dsn
- строка подключения к БД
- db_user
- пользователь
- db_password
- пароль
MySQL
- db_charset
- национальная кодировка. По умолчанию: cp1251.
- db_default_storage_engine
- Тип таблиц, используемых в базе данных. InnoDB или MyISAM. Влияет на установку уровня изолированности транзакций. Используется в качестве значения параметра ENGINE при создании таблиц моделью.
Oracle
- db_schema
- имя схемы. Только на случай отличия от db_user.
- db_cache_statements
- кэширование планов запросов (только для Oracle). Если истина, то вместо prepare используется метод prepare_cached. Это увеличивает производительность, но требует дополнительной настройки Oracle, иначе может вызывать ошибку ORA-01000.
- no_model_update
- если истина, то активная схема данных не используется. Использовалась от безысходности на некоторых платформах, где DBD::Oracle вызывал крах процесса при получении данных типа LONG, а именно такого типа получаются значения COLUMN_DEF.
Ядро
- core_auth_cookie
- если определена, то текущий номер сессии сохраняется в cookie с именем sid и восстанавливается из неё. Значение этой опции соответствует времени жизни cookie. Например, при значении '+1М' cookie будет храниться 1 месяц. Синтаксис — как в соответствующем разделе CGI.pm.
- core_debug_profiling
- если 1, то в STDERR пишется детальная информация о времени исполнения каждой фазы обработки запроса. Если 2, то эта информация накапливается в БД и доступна на экране с типом _benchmarks.
- core_debug_sql
- если 1, то в STDERR пишется детальная информация о формировании запросов функцией sql.
- core_no_log_mac
- если истина (по умолчанию), то ядро не пытается определить MAC-адрес пользователя для записи в протокол. Иначе (то есть при явно прописанном значении 0) на каждый запрос вызывается команда arp и из её результата вычисляется MAC-адрес для IP текущего клиента. Результат возможно получить только если клиент находится в том же сегменте сети, что сервер.
- core_memory_limit
- максимальный допустимый объём памяти для экземпляра процесса (в мебибайтах). Если это значение оказывается превышенным на этапе инициализации, загрузка прерывается. Если же такое происходит после исполнения очередного запроса, то текущий процесс корректно завершается.
- core_fix_tz
- если истина, то при заходе пользователя в систему запоминается его часовой пояс (вычисляется на клиенте при помощи javaScript), точнее, сдвиг локального времени пользователя относительно серверного. Далее эта информация учитывается при исполнении запросов (sql_do) и форматировании дат (__d).
- session_timeout
- время жизни сессии, в минутах.
- no_keepalive
- если истина, то при открытом браузере сессия автоматически НЕ поддерживается. По умолчанию (при пустом значении) до истечения session_timeout WEB-интерфейс посылает специальный запрос, после чего таймер перезапускается.
HTTP
- core_gzip
- если истина, то при возможности используется gzip-кодирование HTTP-ответа.
- core_mtu
- пороговое значение длины HTML, меньше которого gzip-кодирование не применяется даже при установленной $preconf -> {core_gzip}.
- core_no_morons
- если не установлена, то выполняется глобальная замена 'window.open' на маскирующий вызов 'nope'. Эта мера предусмотрена в связи с парадоксальным поведением некоторых HTTP proxy.
- static_site
- Отдельный HTTP-адрес для статики.
- use_cgi
- если истина, то использование API mod_perl (Apache::*) блокируется и вместо него применяется CGI.pm.
Интерфейс
- core_skin
- имя $_SKIN'а по умолчанию.
- core_show_dump
- если истина, то в интерфейсе доступны ссылки с &__dump=1 (пункт меню или Ctrl + RightClick). По этим ссылкам открываются экраны с отладочной информацией (все данные, извлечённые Content-процедурой, в формате Data::Dumper).
- core_unblock_navigation
- если истина, то в режиме редактирования ссылки с меню открываются в немодальных диалоговых окнах. По умолчанию они в этом режиме блокированы.
- core_skip_boot
- если ложь (по умолчанию), то в качестве первого экрана приложение выдаёт пустую страницу (type=_boot) с проверочным js-кодом, который при загрузке в корректно настроенный браузер немедленно перенаправляет клиента на экран авторизации (type=logon). Устанавливать эту опцию и пропускать проверочную страницу имеет смысл только при глубокой отладке или в существенно нестандартных приложениях.
- lang
- язык по умолчанию. Если не указан, считается 'RUS'.
Внешние ресурсы
- ldap
- параметры LDAP-сервера.
- параметры SMTP-сервера.
- master_server
- параметры боевого сервера, прописываемые в конфигурации соответствующего тестового для синхронизации при помощи
Eluda::Install::sync_down.
- peer_name, peer_servers
- параметры для серверного пиринга (обмен информацией между несколькими приложениями).
Неподдерживаемые параметры
- core_multiple_roles
- позволял поддерживать несколько ролей у одного пользователя, при этом в рамках одной сессии предлагалось выбрать единственную роль. В настоящее время, как правило, роль (id_role) у пользователя одна, однако у него может быть множество опций, соответствующих различным разделам приложения.
- core_no_xml
- блокировал использование $_SKIN'а XMLDumper.
- core_path
- предназначался для явного указания одной из нескольких одновременно установленных версий ядра.
- subset, subset_names
- имели отношение к идее независимого лицензирования отдельных частей приложения.