Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
use EV; до загрузки Mojo (т.е. даже не в AppName.pm, а в скрипте-пускалке проекта) — от используемого event loop очень сильно зависит стабильность, производительность и разные побочные эффекты (например, реакция на fork()), поэтому лучше обеспечить использование нужной реализации event loop, а не надеяться на автоопределение и потом сутками ловить странные баги проявляющиеся только на одном сервере, где случайно забыли поставить EV.$c->render_later;).EV в скрипт-пускалку стоит добавить эти строчки, чтобы при возникновении необработанного исключения где-то в глубинах приложения оно упало, а не попыталось продолжить работать как ни в чём не бывало:$EV::DIED = sub { warn $@ if !$SIG{__DIE__}; exit 255 };
Mojo::IOLoop->singleton->reactor->unsubscribe('error');
use Mojo::Base 'Mojolicious';
делает ненужнымuse utf8;
и, скорее всего (если не используются IO::File и mro 'c3'), ненужнымuse Modern::Perl;
$r->any('/(*everything')->to('user#main');
Здесь опечатка (скобка не закрыта, либо её можно было вообще не открывать), но главное то, что этот роутинг не совпадёт с корнем сайта — чтобы (*everything) стал опциональным нужно добавить в stash ключ с этим именем (т.е. обеспечить значение по умолчанию если placeholder не задан):$r->any('/*everything')->to('user#main', everything=>undef);
use base 'Mojolicious::Plugin';
use Modern::Perl;
Аналогично вышеупомянутому, лучше заменить на:use Mojo::Base 'Mojolicious::Plugin';
if $user_login eq $user foreach (@{$self->config->{PrivilegedUsers}->{Administrators}})
Извините, это не моё дело, каждый пишет как ему удобно, и это не связано с Mojo, но… для таких проверок в перле вообще-то существуют хеши. И даже если в конфиге хеш задавать тупо присваивая всем ключам значение 1 неудобно, массив из конфига можно отконвертировать в хеш одной операцией map{$_=>1}@admins при запуске приложения. Кроме того, этот код работать не может — во-первых нельзя использовать постфиксный if внутри постфиксного for, и во-вторых даже если переделать foreach на обычный, то вместо $user вероятно должна быть $_, иначе какой смысл в foreach? Судя по всему код реального проекта был не очень внимательно изменён для статьи, ниже ещё есть похожие проблемы, например перед вызовом $c->RedmineReport(); создаётся, но никак не используется %snapshot.
Полезное и приятное для разработчика в Mojolicious