On future: encoding utf-8

NAME

MPMinus::Manual - What is MPMinus, and how do I use it?

VERSION

version 1.13

TERMS

Apache

WEB-сервер Apache. Этот WEB-сервер является единственным сервером, поддерживающим MPMinus. MPMinus разработан на основе моделя mod_perl2, как модуль Apache.

DESCRIPTION

MPMinus (MPM) - mod_perl2 Web Application Framework

MPMinus - Фреймворк для разработки сайтов с высокой нагрузкой. MPMinus рассчитан для специалистов, работающих со связкой технологий Apache + mod_perl2. Большинство базовых технологий, использующиеся в работе этой связки, этим документом не рассматриваются. Для получения более подробной информации о вопросах связанных с mod_perl2, Apache и Perl, обращайтесь к соответствующим справочным руководствам этих технологий. В задачи этого пособия входит подробное описание работы MPMinus.

CATALYST AND MPMINUS

Иногда разработчики приводят аналогию MPMinus с системой Catalyst. Такая аналогия может быть спорной, т.к. это абсолютно две разные системы. Система Catalyst это система которая призвана объединить компоненты Model, View и Controller в одно целое; когда как система MPMinus объеденят лишь методы доступа к объектам уровней Model, View и Controller.

Но сразу хотелось бы оговориться, что большая часть идей принятых разработчиками Catalyst, приянто и проектом MPMinus, что позволяет говорить о развитии проектов в одном направлении.

CONFIGURATION

Конфигурационные параметры инициализируются в проектом модуле ModPerl::MySite::Handlers с помощью принудительного вызова:

sub handler {
    my $r = shift;
    my $m = MPMinus->m;
    $m->conf_init($r, __PACKAGE__);
    
    ...
    
    my $project = $m->conf('project');
    
    ...    
}

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

$m->conf('NAME') - Получение значение переменной NAME из хэша конфигурации

my $cfg = $m->get('conf') - Получение ссылки на хэш конфигурации

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

Более подробную информацию см. MPMinus::Configuration

APACHE LEVEL

Уровень процессов Apache (httpd).

Переменные этого уровня являются общими переменными для всех проектов MPMinus. К таким переменным следует относить: неизменяемые пользователем значения, установленные в конфигурационных файлах Apache: *.conf. Доступ к этим переменным можно получить с помощью методов mod_perl. См. http://perl.apache.org/docs/index.html

REQUEST LEVEL

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

sid

16-ти значное 16-тиричное число, идентификатор запроса (MPMinus-сессии)

hitime

Дата и время в милисекундах момента запроса

package

Пара значений: имя пакета и количество инициированных запросов на данный процесс Apache

project

Имя проекта НЕ в стандарте UNIX (с учетом регистра)

prefix

Имя проекта в стандарте UNIX (как результат выражения lc(project)). Это значение используется как префикс проекта для нужд генерации файлов, каталогов и другой статической информации.

request_uri

Строка запроса, URI

request_method

Метод запроса

remote_user

Логин пользователя (HTTP)

remote_addr

IP адрес пользователя (HTTP)

http_host

Доменное имя сайта к которому осуществляется обращение. Для нестандартных портов строится как: server_name[:server_port]

server_admin

Адрес e-mail администратора проекта, maintainer

server_name

Доменное имя сайта (виртуального хоста), заданное директивой ServerName

server_port

Номер используемого порта (виртуального хоста)

document_root

Корневая папка проекта доступная из вне (абсолютный базовый путь). Используется разработчиком проектов как базовый путь до корня сайта проекта.

modperl_root

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

Этот путь может определять то, где могут храниться данные доступные ВСЕМ проектам MPMinus поэтому рациональность использования должна быть определена быть определена приватностью проекта.

Для "конкретных" данных проекта следует использовать document_root (shtml, cache и т.д.) когда как modperl_root отлично подйдет для папки логов, баз данных, баз сессий и прочей статической информации.

PROJECT LEVEL

Уровень проекта.

Переменные этого уровня едины для всех экземпляров конкретного проекта.

dir_conf

Директория конфигурации (conf)

dir_cache

Директория кэша (cache)

dir_logs

Директория логов проекта (log)

dir_db

Директория локальных БД (db)

dir_shtml

Директория шаблонов SSI (shtml)

fileconf

Путь к файлу конфигурации <prefix>.conf

file_error

Имя файла лога ошибок (только имя): mpminus-<prefix>_error.log

file_debug

Имя файла лога сообщений отладки (только имя): mpminus-<prefix>_debug.log

logdir

Путь до каталога логов (абсолютный путь)

confdir

Путь до каталога конфигурации (абсолютный путь)

errorlog

Путь до файла лога ошибок (абсолютный путь)

debuglog

Путь до файла лога сообщений отладки (абсолютный путь)

url

Адрес сайта проекта HTTP для нужд редиректов и внутренних абсолютных ссылок (URL)

urls

Адрес сайта проекта HTTPS для нужд редиректов и внутренних абсолютных ссылок (URL)

url_shtml

Конечный URL (HTTP) до шаблонов SSI (файлов shtml)

urls_shtml

Конечный URL (HTTPS) до шаблонов SSI (файлов shtml)

configloadstatus

Статус чтения файла <prefix>.conf (0 - не прочтено /1 - прочтено)

locked_keys

Список (ссылка на массив) защищенных ключей конфигурации

Флаги (0 - выключено / 1 - включено):

_debug_

Флаг отладки

_syslog_

Флаг использования системного лога в качестве стандартного лога ошибок и отладки

_sendmail_

Флаг разрешения отправки e-mail

_errorsendmail_

Флаг разрешения отправки e-mail по факту ошибок (exception)

Особые переменные (extended). Эти переменные могут быть определены в конфигурационном файле виртуального хоста, или же в файле конфигурации проекта fileconf (например, <prefix>.conf)

content_type

MIME тип содержимого, Content-Type по умолчанию

smtp_host

IP адрес или доменное имя SMTP сервера

smtp_user

Логин (если требуется авторизация SMTP)

smtp_password

Пароль (если требуется авторизация SMTP)

db_driver

Имя драйвера, например: CSV, DBM, ExampleP, File, Gofer, ODBC, Oracle, Pg, Proxy, SQLite, Sponge, mysql

db_dsn

DSN соединения, например: DBI:Oracle:MYSID

db_host

IP адрес или доменное имя базы данных

db_name

Имя базы данных (или SID)

db_port

Порт БД, если он не стандартный

db_user

Логин пользователя базы данных

db_password

Пароль пользователя базы данных

db_timeout_connect

Время, в секундах, определяющее таймаут на соединение

db_timeout_request

Время, в секундах, определяющее таймаут на запрос

db_mysql_host

IP адрес или доменное имя базы данных MySQL

db_mysql_name

Имя базы данных MySQL

db_mysql_user

Логин пользователя базы данных MySQL

db_mysql_password

Пароль пользователя базы данных MySQL

db_oracle_host

IP адрес или доменное имя базы данных Oracle

db_oracle_name

Имя базы данных Oracle

db_oracle_user

Логин пользователя базы данных Oracle

db_oracle_password

Пароль пользователя базы данных Oracle

MSO CONFIGURATION (MULTISTORE)

Для конфигурирования MultiStore соединений, используется конструкция в файле конфигурации fileconf имеющая вид, примерно следующий:

<store foo>
    dsn   DBI:mysql:database=TEST;host=192.168.1.1
    user  login
    pass  password
    <Attr>
        mysql_enable_utf8 1
        RaiseError        0
        PrintError        0
    </Attr>
</store>
<store bar>
    dsn   DBI:Oracle:FOOSID
    user  login
    pass  password
    <Attr>
        RaiseError        0
        PrintError        0
    </Attr>
</store>
<store baz>
    dsn   DBI:Oracle:BARSID
    user  login
    pass  password
    <Attr>
        RaiseError        0
        PrintError        0
    </Attr>
</store>

Данный пример может располагаться как в фале конфигурации fileconf так и в любом другом зависимом файле, например, conf/mso.conf

Методы доступа к этим данным конфигурации приведены на странице описания "EXAMPLE" in MPMinus::Store::MultiStore

API: INTERFACE AND METHODS

Основной принцип MPMinus - предоставление API! Именно API позволяет модифицировать код MPMinus независимо от кода Ваших проектов.

Взаимодействие с API выполняется в два этапа. Первый - момент компилляции; второй - момент выполнения. На момент компилляции происходит объединение всех ващих классов с классами ядра MPMinus. На момент выполнения вызываются те или иные методы MPMinus.

Все методы MPMinus условно делятся на классы: основные методы, методы MVC SKEL Transaction и утилитарные методы.

MAIN METHODS

Основные методы MPMinus позволяют получить доступ к основным инструментам ядра MPMinus - подключенным объектам ядра MPMinus.

conf, config, get_conf, get_config

See MPMinus

conf_init

See MPMinus::Configuration

disp, dispatcher

See MPMinus

drec, drecord, record

See MPMinus

get, get_node

See MPMinus

m, glob

See MPMinus

multistore

See MPMinus

mysql

See MPMinus

namespace

See MPMinus

oracle

See MPMinus

r, req

See MPMinus

set, set_node

See MPMinus

set_conf, set_config

See MPMinus

MVC SKEL TRANSACTION METHODS

Методы MVC SKEL Transaction используются в случае когда поверх базовых хендлеров происходит расширенная диспетчеризация с использованием механизма MVC SKEL. Более подробную информацию см. MPMinus::Transaction

ActionTransaction

See MPMinus::Transaction

ActionExecute

See MPMinus::Transaction

ActionCheck

See MPMinus::Transaction

getActionRecord

See MPMinus::Transaction

UTILYTARY METHODS

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

debug

See MPMinus::Util

exception

See MPMinus::Util

log

See MPMinus::Util

log_*

See MPMinus::Util

sendmail, send_mail

See MPMinus::Util

syslog

See MPMinus::Util

HANDLERS

!!! Тут описываем хэндлеры, принцип построения класса !!!

HANDLER'S TYPES

!!! Типы !!! см. соотв. секцию конфигурации mod_perl2 !!!

тип хэндлера modperl вместо стандартного (perl-script)

Если используется $r->handler('modperl') то нужно устанавливать опции:
PerlOptions +GlobalRequest
PerlOptions +SetupEnv

Подробнее см. http://perl.apache.org/docs/2.0/user/config/config.html#C_SetHandler_

FILTERS

!!! Тут описываем фильтры !!!

sub handler {
    ...
    $r->add_output_filter(\&OutputFilterHandler); # Устанавливаем хэндлер OutputFilter
    $r->add_input_filter(\&InputFilterHandler);   # Устанавливаем хэндлер InputFilter
    ...
}

DISPATCHING

Диспетчеризация обеспечивает URL-to-Action механизм обработки клиентских запросов. Механизм основан на том факте, что в зависимости от переданного URL выполняется то или иное действие на стороне MPMinus. На текущий момент использует URL(URI) диспетчеризация. Сам URI Диспетчер обеспечивает диспетчеризацию запросов клиента исходя из ряда типов диспетчеризации:

Location, Regexp, LocArr и MixArr.

Каждый из этих типов служит для диспетчеризации различных запросов исходя из текущих требований разрабатываемого сайта. Подробнее о различиях типов диспетчеризации см. ниже.

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

Location

Эта диспетчеризация выражается в прямом сопоставлении - "Запрошеный URI" == "Значение".

Например: "/" == "/"

Для включения в работу такой диспетчеризации следует сделать следующие изменения в конфигурации Apache:

<Location ~ ^/$>
    PerlInitHandler  ModPerl::MySite::Handlers
</Location>

И, соответственно, в модуле ModPerl::MySite::Root:

sub record {
    (
        -uri => '/',
        ...
    )
}

Диспетчеризация Location наиболее проста в обработке и является эталоном производительности. Этот тип диспетчеризации подходит для большинства сайтов, разрабатывающихся с использованием MPMinus.

Regexp

Эта диспетчеризация выражается в сопоставлении - "Запрошеный URI" =~ "Regexp".

Например: "/0123456789abcdef" =~ /^\/[a-zA-Z0-9]{16}\/?$/

Для включения в работу такой диспетчеризации следует сделать следующие изменения в конфигурации Apache:

<Location ~ ^\/[a-zA-Z0-9]{16}\/?$>
    PerlInitHandler  ModPerl::MySite::Handlers
</Location>

И, соответственно, в модуле ModPerl::MySite::Root:

sub record {
    (
        -uri => ['REGEXP', 'root.mpm', qr/^\/[a-zA-Z0-9]{16}\/?$/],
        ...
    )
}

Где REGEXP - Ключ типа диспетчеризации. Ключи типов диспетчеризации регистронезависимы.

LocArr

Эта диспетчеризация выражается в обратном сопоставлении характерном для нескольких вариантов URI из списка, как - "Запрошеный URI" == "Одно из значений списка".

Например: "/" == ("/","/root.mpm","/index.mpm")[0]

Для включения в работу такой диспетчеризации следует сделать следующие изменения в конфигурации Apache:

<Location ~ \.[mM][pP][mM]$>
    PerlInitHandler  ModPerl::MySite::Handlers
</Location>						
<Location ~ ^/$>
    PerlInitHandler  ModPerl::MySite::Handlers
</Location>

И, соответственно, в модуле ModPerl::MySite::Root:

sub record {
    (
        -uri => ['LOCARR', 'root.mpm', ['/','/root.mpm','/index.mpm']],
        ...
    )
}
MixArr

Эта смешанная диспетчеризация, выражается в обратном сопоставлении - "Запрошеные URI" = "Обработчик" или "(Запрошеные URI) =~ Regexp".

Например: "/" (==,=~) ("/",qr/^\/(root|index)\.mpm$/)

Для включения в работу такой диспетчеризации следует сделать следующие изменения в конфигурации Apache:

<Location ~ \.[mM][pP][mM]$>
    PerlInitHandler  ModPerl::MySite::Handlers
</Location>						
<Location ~ ^/$>
    PerlInitHandler  ModPerl::MySite::Handlers
</Location>

И, соответственно, в модуле ModPerl::MySite::Root:

sub record {
    (
        -uri => ['MIXARR', 'root.mpm', ['/',qr/^\/(root|index)\.mpm$/]],
        ...
    )
}

MVC

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

Model

Чтение и изменение непосредственно данных. Предоставляется посредством использования DBI, SOAP, LDAP и других систем и подходов.

See MPMinus::Store::MultiStore, MPMinus::Store::MySQL, MPMinus::Store::Oracle, MPMinus::Store::DBI

View

Предоставление данных пользователю. Осуществляется посредством шаблонизации с помощью таких модулей как TemplateM, Template::Toolkit, Mason, HTML::Template и других

Controller

Контроль всего этапа запроса, проверка параметров, диспетчеризация действий, управление потоком. В этом заключается весь MPMinus.

Более подробную информацию о MVC, а вернее сказать шаблона проектирования, читайте в соответствующей документации. Здесь же следует расскзать о различиях подхода классического MVC и "MVC SKEL".

CLASSIC MVC

Классический MVC в контексте использования MPMinus можно охарактеризовать диспетчеризацией. См. "DISPATCHING". Когда приходит запрос в виде URL то первым делом происходит отработка хендлеров по правилам диспетчеризации. Этот подход рационально использовать на сервис ориентированных системах, например, в системах запрос-ответ где в качестве запросы принимается условно "просьба предоставить контент" а в качестве ответа возвращается условно "Примите запрошенный контент".

!!! Тут описываем стандартынй механизм запрос - ответ на примере pay.allo или kernel !!!

MVC SKEL

!!! Тут описываем Transaction модель на примере AAA или аналога типа Root !!!

THANKS

Thanks to Dmitry Klimov for technical translating http://fla-master.com.

AUTHOR

Serz Minus (Lepenkov Sergey) http://serzik.ru <minus@mail333.com>

COPYRIGHT

Copyright (C) 1998-2013 D&D Corporation. All Rights Reserved

LICENSE

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

See LICENSE file