Как создать Catalyst-приложение с нуля. Какие модули нужно установить. Как создать контроллер, модель и представление. Основные настройки для работы с Catalyst.
Изначально, статья была написана специально для журнала "Pragmatic Perl" (см. оригинал). Для блога разделила публикацию на две части.
Все примеры были выполнены специально для публикации, в windows-среде, под Strawberry Perl. В среде unix развернуть все необходимое и заставить работать должно быть даже проще. Приведенные примеры кода будут работать и в том, и в другом случае - они достаточно простые, чтобы не зависеть от тонкостей использования среды.
Данная публикация стала результатом работы над статьей о взаимодействии HTML::FormFu и Catalyst.
Для того, чтобы получить более полное представление о работе HTML::FormFu в Catalyst, я создавала Catalyst-приложение с нуля. Более того, для этого мне даже пришлось установить Catalyst под windows. Можно было пойти более простым путем, и использовать уже готовое рабочее unix-окружение, но тогда оставалась вероятность, что в описании я забуду написать про какой-нибудь важный модуль, или аспект, без внимания к которому подключить HTML::FormFu будет не просто.
На своем блоге я решила разделить статью на две части, т.к. первая может быть полезна не только при создании приложения, использующего HTML::FormFu. Уже сейчас, на основе такого же простого каркаса, я планирую создать небольшое REST API и написать по итогам экспериментов заметку.
Введение
Что такое Catalyst
Catalyst - это фреймворк для создания веб-приложений. Поддерживает концепцию MVC (Model-View-Controller). Catalyst поставляется вместе со своим собственным HTTP-сервером, который можно использовать для разработки и тестирования. В боевых условиях, его используют в связке nginx + FastCGI, или Apache + mod_perl. Можно использовать другие сервера, но такие решения встречаются значительно реже.
Несмотря на регулярную критику, остается самым мощным и популярным фреймворком в perl-среде.
Как установить Catalyst под windows
Запускаем cpan в perl-консоли. Потом вводим первую команду:
|
1 |
force install Catalyst::Runtime |
На этом этапе случился мой первый fail - я долгое время пыталась установить Catalyst (ну правильно, документацию читают только слабаки). Вот так:
|
1 |
force install Catalyst |
Cpan что-то долго думал, что-то закачивал, устанавливал, но в итоге все заканчивалось ошибкой. Устанавливать надо было Catalyst::Runtime, а не Catalyst!
force install нужен, чтобы запретить cpan слишком много думать и обращать внимание на результаты тестов. При установке perl-модулей под windows - это необходимо.
Потом устанавливаем еще немного дополнительных модулей, без которых сложно построить минимальное Catalyst-приложение или не будет работать HTML::FormFu.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
force install Catalyst::Controller::HTML::FormFu force install Catalyst::Devel force install DBD::mysql force install DBI force install DBIx::Class force install Catalyst::Model::DBIC::Schema force install Catalyst::View::TT force install DBIx::Class::Schema::Loader |
Для того, чтобы беспроблемно установить DBIx::Class::Schema::Loader - желательно прописать в переменных окружения путь к вашему локальному mysql-демону ( во время тестирования использовалась локальная mysql-БД ).
|
1 2 3 |
force install MooseX::MarkAsMethods force install Catalyst::Plugin::Unicode::Encoding |
Как создать каркас Catalyst-приложения под Windows
Создаем директорию, в которой будет расположен проект. Например: "C:\Documents and Settings\username\www"
Совет: создавая директорию, следует избегать русскоязычных имен в пути к вашему проекту. В дальнейшем это может привести к возникновению проблем.
Переходим в созданную директорию. В командной строке Strawberry Perl вводим:
|
1 |
catalyst.pl MyApp |
В результате, в каталоге www будет создана директория с именем MyApp, содержащая каркас catalyst-приложения.
Как создать контроллер
Создаем контроллер Admin.pm, в дальнейшем он нам пригодится. Для этого в perl-консоли выполняем команду:
|
1 |
perl script/myapp_create.pl controller Admin |
Остальные контроллеры я создавала вручную.
Как создать View
В отличие от контроллера, view вручную лучше не создавать. В perl-консоли выполняем команду:
|
1 |
perl script/myapp_create.pl view TT TT |
Команда создаст файл TT.pm в директории "/lib/MyApp/View/TT.pm" . Модуль TT.pm требуется отредактировать, добавив настройки:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package MyApp::View::TT; use Moose; use namespace::autoclean; extends 'Catalyst::View::TT'; __PACKAGE__->config( TEMPLATE_EXTENSION => '.tt', render_die => 1, CATALYST_VAR => 'c', ENCODING => 'utf-8', ); 1; |
Далее, открываем файл MyApp.pm и добавляем еще немного конфигурационных данных для TT в блоке __PACKAGE__->config():
|
1 2 3 4 5 6 7 8 9 |
__PACKAGE__->config( # ... 'View::TT' => { INCLUDE_PATH => [ __PACKAGE__->path_to( 'root', 'src' ), ], }, encoding => 'utf-8', ); |
Кроме того, в блок use Catalyst qw/.../; добавляем Unicode::Encoding . Это делается для того, чтобы Catalyst смог нормально обрабатывать русскоязычные символы в шаблонах.
|
1 2 3 4 |
use Catalyst qw/ # ... Unicode::Encoding /; |
Если Unicode::Encoding не подключить, в дальнейшем можно будет увидеть в логах ошибку:
|
1 2 3 |
[error] Caught exception in engine "Wide character in syswrite at C:/strawberry/ perl/lib/IO/Handle.pm line 474." Terminating on signal SIGINT(2) |
Настройки для HTML::FormFu
В файле MyApp.pm в блок __PACKAGE__->config() добавляем настройки:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
__PACKAGE__->config( # ... 'Controller::HTML::FormFu' => { 'model_stash' => { schema => 'DB' }, constructor => { tt_args => { ENCODING => 'UTF-8', } } } ); |
Как создать модель
В perl-консоли выполняем команду:
|
1 2 |
perl script/myapp_create.pl model DB DBIC::Schema MyApp::Schema::DB create=static "dbi:mysql:test" "root" "" |
После этого, в блоке connect_info файла "lib/MyApp/Model/DB.pm" добавляем параметр mysql_enable_utf8 :
|
1 2 3 4 5 6 |
connect_info => { dsn => 'dbi:mysql:test', user => 'root', password => '', mysql_enable_utf8 => 1 } |
Этот параметр позволит корректно отображать данные из таблиц БД. Разумеется, если данные хранятся в UTF-формате.
Как запустить сервер Catalyst под Windows
В perl-консоли выполняем команду:
|
1 |
perl script/myapp_server.pl |
Это позволит запустить специальный web-сервер. Для боевого использования он не подходит, для тестирования новых возможностей - вполне. В эту же консоль будет выполняться вывод отладочной инфы сервера.
В браузере вводим адрес:
|
1 |
http://localhost:3000 |
Огромное спасибо за статью, помогли разобраться с обходом тестов при установке на Windows, также нашёл множество интересных статей по Perl)))
Рада, что помогла :)
Можете подсказать, почему ругается тест view_HTML.t (в Вашем случае скорее всего view_TT.t) на строку
__PACKAGE__->path_to( 'root', 'src' );
Говорит, что
"Can't locate object method "path_to" via package 'MyApp'".
Заработало, если заменил на
Catalyst::path_to('MyApp', 'root', 'src'),
Все, туплю. Нужно писать следующим образом:
__PACKAGE__->config(
INCLUDE_PATH => [
MyApp->path_to(qw/root src/),
],
);
А я просто перепутал конфиги lib/MyApp/View/HTML.pm и lib/MyApp.pm при разборе туториала https://metacpan.org/pod/Catalyst::Manual::Tutorial::03_MoreCatalystBasics
Все заработало.
Я не часто проверяю комменты на блоге. Поэтому, спрашивать у меня что-то можно, конечно, но ждать ответа долго может оказаться :) Иногда день-два, иногда - неделю-две. Рада, что вы решили проблему :)
e:\www>perl catalyst.pl BusPlan
Can't open perl script "catalyst.pl": No such file or directory
Устанавливал по инструкции с сайта Catalyst и вашим способом.
Прогуглить не могу. Ничего не пишут по этому поводу.
в Папке CPAN\Build есть две подпапки
Catalyst-Runtime-5.90077-JaVvVm
Catalyst-Runtime-5.90077-RXr7Nt
Попытался поискать Catalyst.PM нашел порядка 6-7 файлов.
Проверьте:
1) Переменные окружения. У меня в винде, в переменных указаны вот такие значения: "C:\strawberry\c\bin;C:\strawberry\perl\site\bin;C:\strawberry\perl\bin;"
2) Файл catalyst.pl размещен в C:\strawberry\perl\site\bin\catalyst.pl , посмотрите, он у вас есть? Можно использовать рекурсивный поиск в директории strawberry, так удобнее. Я пользуюсь Far - там удобный поиск.
Спасибо вам за помощь. Еще один вопросик!
Путь к Демону MySql я прописал следующий: c:\Program Files\MySQL\MySQL Server 5.6\bin\
Надеюсь правильный. По поводу остального спасибо все полезно. Буду разбираться.
Есть ли возможность с вами по почте связаться?
Путь к mysql - это зависит от того, куда вы его установили. Но то, что к директории "/bin" - это правильно. У меня указано: "C:\Prog\mysql\bin" . В этой директории можно найти и сам демон: "C:\Prog\mysql\bin\mysqld.exe" .
По почте со мной связаться конечно же можно :) Пишите пользователю "aninatalie", почтовый сервис "yandex.ru". Хотя почту я тоже не часто проверяю. "Вконтактом" пользуетесь?
Нашёл хорошее решение для установки пакетов для Perl на платформе Windows. Пакеты ставятся быстрее через cpanm, чем через cpan и без плясок с "бубном" и тестами.
https://metacpan.org/release/App-cpanminus