to post messages and comments.

В Mojolicious 1.17 убрали поддержку черновика hixie-76 (http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76) протокола WebSocket. Однако последняя версия Safari (1.5.1) работает с WebSocket именно так, как описано в этом черновике.

Для поддержки Safari в проекте на основе Mojolicios написал модуль MojoX::Transaction::WebSocket76 (https://github.com/SetupRu/mojox-transaction-websocket76), реализующий поддержку WebSocket, как это описано в черновике hixie-76. Пока готова только серверная часть, в клиентской нужды не было.

Кто-то использовал upload файлов на mojo? При загрузке на mojo сервер все работает хорошо, но когда mojo запускается через apache( посредством FastCgiServer ) файлы приходят недогруженными.

Как же круто, что в Mojolicious приложениях можно использовать свои плагины, например, плагин, контексный проекту и подключающий различные хелперы по форматированию и прочее. $self->plugin('App::Helpers'); Включу эту примочку в новую версию генератора SharifulinApp.

Обновил Mojolicious. Обнаружил, что для некоторых методов Test::Mojo удалена возможность указать свой description. Долго думал, но смысла в таком удалении не нашел.

Если кайф использовать в Mojolicious-контроллере другой контроллер, то можно сделать так gist.github.com shift – весь объект self передаем в новый контроллер, чтобы app, req, res и прочее было доступно

У mojo очень приятная асинхронность. Есть модуль, задача которого отправить результаты ввода пользователя в другую систему с помощью нескольких HTTP запросов (к которые входят авторизация в другой системе и отправка формы с результатами).
В результате вырисовывается такой код: pastebin.ca
В случае, если модуль будет запущен из Mojo окружения (mojo веб сервер) запросы будут выполнены асинхронно с выполнением остального кода. Если приложение будет запущено из среды, где не используется Mojo — данная процедура будет выполнена в блокирующем режиме.

Пытался построить цепочки вложенных роутов с условиями по методу запроса — не вышло. С такой цепочкой: $self->routes->waypoint('/user/:user')->via('get')->to('user#read')->route('/profile')->via('post')->to('profile#create') — POST-запрос до user:user/profile никогда не дойдет. Приходится делать два отдельных роута.

Mojo::Base – очень крут, создает конструктор new и умеет работать с атрибутами (аксесоры) чтение-запись. Создавать объекты очень просто: package Foo; use base 'Mojo::Base'; __PACKAGE__->attr('db'); ...

Решил добавить проверку на тип значения в распарсенном JSON (число или строка). Test::Deep::num и str тип зачем-то меняют. Выяснилось, что можно проверять по наличию флагов IOK, NOK и POK у скаляра. В итоге написал две реализации: чистый XS и с использованием B::Flags. Накалякал 52 теста, вроде работает. Не покидает чувство, что изобрел велосипед. (Спасибо @mvuets за помощь!) Кстати, оказалось, что Mojo::Json из чисел делает строки :-/

Объясните мне, дураку, как всей этой мощью воспользоваться. А то вот через Mojolicious::Lite, создается демон-сервер и всё работает, а через Mojolicious::Template просто выхлоп в терминал, а в браузере пусто. Хочется создать скрипт, который будет обрабатываться моим сервером и отдавать страницу, как CGI. Но я, что-то не пойму как это сделать.

Сделал плагин Mojolicious::Plugin::GeoLocation для определения местоположения по геокоординатам или IP. Помоему круто получилось, надо потестить и потом выложить. Зависимости: Geo::IP, Geo::IP::Base::RU, Geo::Geocoder (это мой для гугла и яндекса).

Пишу API сервер на Mojolicious::Lite, формат данных JSON. Решил сделать автоматическое преобраование в XML, причём в виде плагина, чтобы код приложения не менять. Получился плагин Mojolicious::Plugin::JsonToXml, который сам все делает :) Сразу написал тесты к нему, работает)) Также пишу тесты для тестирования API. Очень нравится, получается быстро и удобно. Скоро выложу на github.com

Если нужно выполнить какие-нибудь действия до или после всех контроллеров, используйте хуки. Например, код перед всеми контроллерами: app->plugins->add_hook(before_dispatch => sub {
my($self, $c) = @_;

$c->stash(last => app->db->select('select * from cpan order by -id limit 1')->[0]);
});

Сегодня прокачался в направление I18N для Mojo-приложений. Написал свой плагин i18n, использовал код @vti плюс свои наработки. Познакомился с search.cpan.org Сначала понравилось. Но вопрос со склонениями в русском языке и форматами дат остается открытым. Мне не нравится хранить все переводы в модуле (хеше), причем без вложеностей. Два раза уже писал свою систему локализации, пришел к выводу, что напишу и в третий раз :)