Mojolicious. Сборник рецептов. # Copyright (C) 2008-2010, Sebastian Riedel. =head1 НАЗВАНИЕ Mojolicious::Guides::Cookbook - Сборник полезных программных решений ОБЗОР Готовим с помощью L. Рецепты на любой вкус. =head1 РАЗВЕРТЫВАНИЕ Запуск L и L приложений на различных платформах. =head2 Встроенный сервер L имеет ультрапортативный HTTP 1.1 совместимый web-сервер. Обычно он используются при разработке, но он также достаточно стабильный и быстрый для небольших и средних приложений. % ./script/myapp daemon Server available at http://127.0.0.1:3000. Имеет множество опций, и, как известно, работает на любой платформе где есть Perl. % ./script/myapp help daemon ...Список доступных опций... Другим большим преимуществом является то, что он поддерживает из коробки TLS и ВебСокеты % ./script/myapp daemon --listen https://*:3000 Server available at https://*:3000. Сертификат разработчика для тестирования встроен, потому это просто работает. =head2 Встроенный Prefork Сервер Чтобы допускать масштабирование с несколькими процессорами (ядрами) и снизить потери производительности из-за блокирующего (медленного) API, встроенный веб-сервер имеет многопроцессовый preforking режим. Это не работает на Windows из-за оптимизаций для UNIX, но это достаточно быстро и масштабируемо для больших приложений. % ./script/myapp daemon_prefork Server available at http://127.0.0.1:3000. По умолчанию он будет принимать одно соединение от клиента на один процесс-обработчик, как Apache, но это значение может быть увеличено, позволяя огромное количество одновременных клиентских соединений. (Epoll и kqueue будет использоваться автоматически при наличии) % ./script/myapp daemon_prefork --clients 100 Server available at http://127.0.0.1:3000. =head2 Nginx Одним из наиболее популярных способов установки в настоящее время является встроенный preforking web сервер за инвертированным прокси Nginx . upstream myapp { server 127.0.0.1:3000; } server { listen 80; server_name localhost; location { proxy_read_timeout 300; proxy_pass http://myapp; } } Также вожможно использование доменных сокетов UNIX. upstream myapp { server unix:/tmp/myapp.sock; } server { listen 80; server_name localhost; location { proxy_read_timeout 300; proxy_pass http://myapp; } } Встроенный web-сервер, конечно, так же их поддерживает . % ./script/myapp daemon_prefork --listen file:///tmp/myapp.sock Server available at file:///tmp/myapp.sock. Интересным побочным эффектом является то, что можно параллельно запустить несколько серверов, позволив им совместно использовать один и тот же сокет и файл блокировки. Это позволяет осуществлять так называемое C<горячее развёртывание>, означающее полное отсутствие простоя во время обновления программ. % ./script/myapp daemon_prefork --listen file:///tmp/myapp.sock\ --pid /tmp/myapp1.pid --lock /tmp/myapp.lock --daemonize Server available at file:///tmp/myapp.sock. Всё что вам надо — это обновить код вашего приложения, запустить второй экземпляр сервера и после этого послать старому экземпляру сигнал C. Старый сервер будет аккуратно выключен, активные соединения не будут разорваны и ваши пользователи ничего не заметят. % ./script/myapp daemon_prefork --listen file:///tmp/myapp.sock\ --pid /tmp/myapp2.pid --lock /tmp/myapp.lock --daemonize % kill -s USR1 `cat /tmp/myapp1.pid` =head2 Apache/CGI C поддерживается «из коробки», и ваше приложение на L автоматически определит, что оно запущено как C-скрипт. ServerName localhost DocumentRoot /home/sri/myapp/public ScriptAlias /myapp "/home/sri/myapp/script/myapp" =head2 Apache/FastCGI C тоже поддерживается «из коробки», и ваше приложение на L автоматически определит, что оно запущено как C-скрипт. ServerName localhost DocumentRoot /home/sri/myapp/public FastCgiIpcDir /tmp FastCgiServer /home/sri/myapp/script/myapp -processes 10 =head2 PSGI/Plack L - это интерфейс между Perl веб-фреймворками и веб-серверами. L - это Perl модуль и набор разработчика, который содержит связующее ПО PSGI, вспомогательные инструменты и адаптеры для веб-серверов. На создание L и L вдохновили Python WSGI и Ruby Rack. Приложения L смехотворно просто разверачивать с помощью L. % plackup ./script/myapp HTTP::Server::PSGI: Accepting connections at http://0:5000/ L предоставляет много серверных и протокольных адаптеров, вы можете выбирать из C, C и C. Удостоверьтесь что запускаете C из вашего рабочего каталога приложений, иначе библиотеки могут быть не найдены. % plackup ./script/myapp -s FCGI -l /tmp/myapp.sock Из-за того что C использует причудливый способ загрузки вашего скрипта, L не всегда в состоянии определить рабочую директорию. В таком случае используйте переменную окружения C. По той же самой причине строчка Cstart> должна быть последним Perl-оператором в приложении. % MOJO_HOME=/home/sri/myapp plackup ./script/myapp HTTP::Server::PSGI: Accepting connections at http://0:5000/ Некоторые серверные адаптеры могут запросить файл C<.psgi>, если это происходит, вы просто указываете на ваш скрипт приложения. Он будет себя вести так как надо, если обнаружит пременную окружения C. =head2 Apache/mod_perl (PSGI/Plack) C это хороший пример L адаптера без использования C, помните что установка переменной окружения C необходима L для автоматического обнаружения L. ServerName localhost DocumentRoot /home/sri/myapp/public $ENV{PLACK_ENV} = 'production'; $ENV{MOJO_HOME} = '/home/sri/myapp'; SetHandler perl-script PerlHandler Plack::Handler::Apache2 PerlSetVar psgi_app /home/sri/myapp/script/myapp =head2 IIS6.0/FastCGI Мы не советуем использовать IIS, ибо это страшно нестабильный веб-сервер. Избегайте работы с ним, если это возможно. Мы не можем сделать это для вас это приятным опытом, но может быть мы сможем немного облегчить страдания. Во-первых, вы должны скачать и установить свежую версию C и L. C - это лучшая версия Perl для Windows, которая, вероятно, может быть. После вам нужно установить IIS 6.0, а также расширение FastCGI для него, которое не входит в стандартный инсталлятор. Создайте новый сайт следующим образом C > C > C > C > C > C и завершите процесс инсталляции. Откройте свойства созданного сайта и выберете вкладку C. Установите нужные значение для полей C, C, C, C и т.д. На вкладке C установите C в C, C в C и C, C в C. Нажмите на кнопку C, а после на кнопку C (следующая за C). Проставте в C значение C и снимете галочку с поля C. Вставьте следующие строки в C или C на 64-разрядных системах. [Types] *=MyApp [MyApp] ExePath=c:\strawberry\perl\bin\perl.exe Arguments="c:\myapp\script\myapp fastcgi" ; Разрешите IIS обработывать статичные файлы IgnoreExistingFiles=0 IgnoreDirectories=1 И напоследок, IIS временами очищает ваши переменные окружения, но так как Windows не будет работать без C, вам потребуется установить эту переменную вручную в вашем приложении. # Приложение package MyApp; use base 'Mojolicious'; sub startup { my $self = shift; # Используем перехватчик, чтобы устанавливать переменную окружения при каждом запросе $self->plugins->add_hook( before_dispatch => sub { $ENV{SYSTEMROOT} = 'c:\\winnt' } ); } 1; =head1 Развлекаемся Хаки, которые быть может и не очень полезны, но зато интересны! :) =head2 Hello World Если экономить на каждом байте, то самое маленькое C приложение, написанное на L, имеет следующий вид: use Mojolicious::Lite; get '/' => {text => 'Hello World!'}; app->start; Это работает, потому что автоматический рендеринг срабатывает, даже если код фактически не выполняется маршрутизатором, рендерер только забирает значение C из stash и формирует ответ. =cut ------------------------------------------------------------------------------- http://translated.by/you/mojolicious-cookbook/into-ru/trans/ Original (English): Mojolicious Cookbook (http://github.com/kraih/mojo/raw/master/lib/Mojolicious/Guides/Cookbook.pod) Translation: © r3code, shoorick, HeavyAnykey, Foxcool, zhdinar, vti, Руслан Гроховецкий. translated.by crowd