Как создать Catalyst-приложение с нуля

Как создать 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-консоли. Потом вводим первую команду:

На этом этапе случился мой первый fail - я долгое время пыталась установить Catalyst (ну правильно, документацию читают только слабаки). Вот так:

Cpan что-то долго думал, что-то закачивал, устанавливал, но в итоге все заканчивалось ошибкой. Устанавливать надо было Catalyst::Runtime, а не Catalyst!

force install нужен, чтобы запретить cpan слишком много думать и обращать внимание на результаты тестов. При установке perl-модулей под windows - это необходимо.

Потом устанавливаем еще немного дополнительных модулей, без которых сложно построить минимальное Catalyst-приложение или не будет работать HTML::FormFu.

Для того, чтобы беспроблемно установить DBIx::Class::Schema::Loader - желательно прописать в переменных окружения путь к вашему локальному mysql-демону ( во время тестирования использовалась локальная mysql-БД ).

 

Как создать каркас Catalyst-приложения под Windows

Создаем директорию, в которой будет расположен проект. Например: "C:\Documents and Settings\username\www"

Совет: создавая директорию, следует избегать русскоязычных имен в пути к вашему проекту. В дальнейшем это может привести к возникновению проблем.

Переходим в созданную директорию. В командной строке Strawberry Perl вводим:

В результате, в каталоге www будет создана директория с именем MyApp, содержащая каркас catalyst-приложения.

 

Как создать контроллер

Создаем контроллер Admin.pm, в дальнейшем он нам пригодится. Для этого в perl-консоли выполняем команду:

Остальные контроллеры я создавала вручную.

 

Как создать View

В отличие от контроллера, view вручную лучше не создавать. В perl-консоли выполняем команду:

Команда создаст файл TT.pm в директории "/lib/MyApp/View/TT.pm" . Модуль TT.pm требуется отредактировать, добавив настройки:

Далее, открываем файл MyApp.pm и добавляем еще немного конфигурационных данных для TT в блоке __PACKAGE__->config():

Кроме того, в блок use Catalyst qw/.../; добавляем Unicode::Encoding . Это делается для того, чтобы Catalyst смог нормально обрабатывать русскоязычные символы в шаблонах.

Если Unicode::Encoding не подключить, в дальнейшем можно будет увидеть в логах ошибку:

 

Настройки для HTML::FormFu

В файле MyApp.pm в блок __PACKAGE__->config() добавляем настройки:

 

Как создать модель

В perl-консоли выполняем команду:

После этого, в блоке connect_info файла "lib/MyApp/Model/DB.pm" добавляем параметр mysql_enable_utf8 :

Этот параметр позволит корректно отображать данные из таблиц БД. Разумеется, если данные хранятся в UTF-формате.

 

Как запустить сервер Catalyst под Windows

В perl-консоли выполняем команду:

Это позволит запустить специальный web-сервер. Для боевого использования он не подходит, для тестирования новых возможностей - вполне. В эту же консоль будет выполняться вывод отладочной инфы сервера.

В браузере вводим адрес:

 

Похожие публикации на блоге программиста

Что такое HTML::FormFu

Использование HTML::FormFu при работе с Catalyst

Как создать Catalyst-приложение с нуля: 10 комментариев

  1. wa_pis

    Огромное спасибо за статью, помогли разобраться с обходом тестов при установке на Windows, также нашёл множество интересных статей по Perl)))

  2. TheAthlete

    Можете подсказать, почему ругается тест 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'),

  3. TheAthlete

    Все, туплю. Нужно писать следующим образом:

    __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

    Все заработало.

    1. Natalie Автор записи

      Я не часто проверяю комменты на блоге. Поэтому, спрашивать у меня что-то можно, конечно, но ждать ответа долго может оказаться :) Иногда день-два, иногда - неделю-две. Рада, что вы решили проблему :)

  4. Роман

    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. Natalie Автор записи

      Проверьте:
      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 - там удобный поиск.

  5. Роман

    Спасибо вам за помощь. Еще один вопросик!
    Путь к Демону MySql я прописал следующий: c:\Program Files\MySQL\MySQL Server 5.6\bin\
    Надеюсь правильный. По поводу остального спасибо все полезно. Буду разбираться.
    Есть ли возможность с вами по почте связаться?

    1. Natalie Автор записи

      Путь к mysql - это зависит от того, куда вы его установили. Но то, что к директории "/bin" - это правильно. У меня указано: "C:\Prog\mysql\bin" . В этой директории можно найти и сам демон: "C:\Prog\mysql\bin\mysqld.exe" .
      По почте со мной связаться конечно же можно :) Пишите пользователю "aninatalie", почтовый сервис "yandex.ru". Хотя почту я тоже не часто проверяю. "Вконтактом" пользуетесь?

Комментарии запрещены.