Отличный шаблонизатор, простота роутов, все радует.
Но, о том что "просто работает" писать скучно - мы этого просто не замечаем.
Напишу о неприятностях.
Так как сайт двуязычный, а подшаблоны хочется иметь общими - понадобился словарь локализации.
Ну для простеньких вещей типа
<%= l Contacts %>Выведет "Контакты" и "Contacts" в зависимости от роута и/или url.
Задача простая, но велосипедов лучше не плодить, заглянул в CPAN.
Конечно же, там нужный модуль уже есть: Mojolicious-Plugin-I18N, ну кто б сомневался. Судя по описанию - то что нужно. Дата свежая. Отлично. Рабочего кода - 300 строчек вместе с документацией. Будем подключать.
Пару слов как выглядит мой проект.
Это взятый с github mojolicious , ну просто git clone ....
и сунутый туда подмодулем мое приложение git submodule add ....
Идеальное работающая вещь. Как ее разворачивать на других серверах?
git clone, git submodule update, раз и работает.
Метод это мне очень нравится, он много кем используется, ну например symfony.
Я использую такой же метод для vimfiles, когда .vim лежит в git и субмодулями прикручены всевозможные модули.
Обновление, разворачивание, централизованное управление через puppet, все эти задачи выполняются на раз. Легко и приятно.
Ок, пробую проецировать этот метод, на модуль mojo..-i18n. Ответим на вопрос, куда в дерево каталогов его нужно импортировать.
Ответ: эээ, ааа, мммм.....
Да никуда. В таком виде, его не подключить.
Связываюсь с автором, спрашиваю, он предлагает варианты
а) ставить через cpan
б) писать Makefile.pm
в) использовать carton (некая реинкарнация bundler)
Т.е. убить легкий деплой, получить проблемы с контролем совместимости версий, вводить новые (абсолютно ненужные) сущности.
И все ради чего? 200 строк кода?
А если таких модулей нужно будет 20 штук?
Для этой задачи обошелся собственным кодом в 50 строчек.
Но осадочек остался. Нужно обязательно к этой теме вернуться и решение найти.
Идеал - добится такого же легкого подключения как bundle в symfony .
git submodule add ...
echo "use mymodule" >> site.pm
Иначе, смысл перла без cpan? Переизобретать колесо?
Рад буду, советам, комментариям, размышлениям.
UPD:
Благодаря комменту Viacheslav Tykhanovskyi, решение найдено.
mkdir -p contrib
git submodule add git://github.com/sharifulin/mojolicious-plugin-i18n.git contrib/mojolicious-plugin-i18n
Добавляем в script/myapp
unshift @INC, "$_" for glob "$FindBin::Bin/../contrib/*/lib";
и в lib/myapp.pm
$self->plugin('Mojolicious::Plugin::I18N');
Чтож, получилось неплохо.


