Showing posts with label Catalyst. Show all posts
Showing posts with label Catalyst. Show all posts
Friday, 29 January 2010
Catalyst: конфигурация модели
Сабж довольно частый -- очень удобно иметь единый конфиг, а не размазаный по десятку модулей. Сходя найти решение "как передать конфигу в модель" не нашёл, но спас Гугл: http://blog.jrock.us/articles/Catalyst%20Tips:%20Part%201.pod
О $c->model
В документации по Каталисту на Цпане сказано:
Обращаем внимание на последний пункт по причине, что он нифига не работает, т.е. чтобы обращаться по $c->model() (вместо $c->model('MyModelName')) надо ОБЯЗАТЕЛЬНО вписать в конфиг параметр default_model: VashModel и только после этого оно заработает. Так понимаю, это бага.
If the name is omitted, it will look for - a model object in $c->stash->{current_model_instance}, then - a model name in $c->stash->{current_model}, then - a config setting 'default_model', or - check if there is only one model, and return it if that's the case.
Обращаем внимание на последний пункт по причине, что он нифига не работает, т.е. чтобы обращаться по $c->model() (вместо $c->model('MyModelName')) надо ОБЯЗАТЕЛЬНО вписать в конфиг параметр default_model: VashModel и только после этого оно заработает. Так понимаю, это бага.
Как создать объект, конструируемый на этапе старта Каталиста
Как создать объект конструируемый на этапе старта Каталиста, который потом использовался всеми контроллерами до окончания работы Каталиста ? А вот так: http://community.livejournal.com/ru_catalyst/9867.html
И вопрос и ссылка заимствованы с вышеуказанного урла.
И вопрос и ссылка заимствованы с вышеуказанного урла.
Перенос PAR пэкаджа с 32 битной на 64 битную платформу
Я уже говорил, что PAR кроме pm модулей на чистом Перле складывает в свой архив .so расширения, и обещался провести эксперимент переноса рабочего приложения с 32 битной на 64 битную платформу.
Внимание, рабочая машинка имеет конфу (сервер, никаких спец модулей для Perl нету):
2.6.18-ovz-smp-alt14 #1 SMP Wed May 2 15:41:34 MSD 2007 x86_64 x86_64 x86_64 GNU/Linux
девелоперская:
Linux nrg-desktop 2.6.24-22-generic #1 SMP Mon Nov 24 18:32:42 UTC 2008 i686 GNU/Linux
Как собрать PAR пэкадж я уже говорил в http://perlaround.blogspot.com/2009/03/par-catalyst.html, сейчас обсудим комплекс мер по подготовке второй системы к приёму пэкадажа :)
Ставим PAR: sudo cpan PAR PAR::Packer (возможно, PAR::Packer придётся ставить через cpan force).
Переливаем пэкадж на новую машину каким-то образом (я предпочитаю sftp, т.к. он сходу работает в Гноме).
Запускаем и обламываемся:
Как вариант, можно попробовать собрать в Пэкадж ещё и сам Перл интерпретатор (дада, вы не ослышались!), делается это так pp -o имя_нового_пэкаджа_с_перлом catapp_server.par, но в моём случае это тоже не помогло.
Что же, пока принимаю поражение, но не сдаюсь.
Добавление: вообще, вариант проблему решить посредством виртулизации, например, на qemu -- т.е. собрать дистрибутив, в котором будет 1) ядро ОС 2) Перл 3) Всё необходимое для пуска Перла и в таком виде его раздавать :) Но тут возникает ещё большая куча проблем -- как быть с диском для виртулки, как работать с сетью и проч. Так что тоже для мелочи не вариант.
Часть инфы взята из: http://catalyst.infogami.com/cookbook/par
Внимание, рабочая машинка имеет конфу (сервер, никаких спец модулей для Perl нету):
2.6.18-ovz-smp-alt14 #1 SMP Wed May 2 15:41:34 MSD 2007 x86_64 x86_64 x86_64 GNU/Linux
девелоперская:
Linux nrg-desktop 2.6.24-22-generic #1 SMP Mon Nov 24 18:32:42 UTC 2008 i686 GNU/Linux
Как собрать PAR пэкадж я уже говорил в http://perlaround.blogspot.com/2009/03/par-catalyst.html, сейчас обсудим комплекс мер по подготовке второй системы к приёму пэкадажа :)
Ставим PAR: sudo cpan PAR PAR::Packer (возможно, PAR::Packer придётся ставить через cpan force).
Переливаем пэкадж на новую машину каким-то образом (я предпочитаю sftp, т.к. он сходу работает в Гноме).
Запускаем и обламываемся:
Can't load '/tmp/par-nrg/cache-e463425e9fd4743fd99b42ffc3b1f2aee266f2aa/2b152795.so' for module HTML::Parser: /tmp/par-nrg/cache-e463425e9fd4743fd99b42ffc3b1f2aee266f2aa/2b152795.so: неправильный класс ELF: ELFCLASS32 at /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/DynaLoader.pm line 230.
at /usr/lib/perl5/site_perl/5.8.8/PAR/Heavy.pm line 109
Compilation failed in require at HTML/Entities.pm line 147.
Compilation failed in require at Catalyst/Engine.pm line 8.
BEGIN failed--compilation aborted at Catalyst/Engine.pm line 8.
Compilation failed in require at (eval 19) line 3.
...propagated at /usr/lib/perl5/5.8.8/base.pm line 85.
BEGIN failed--compilation aborted at Catalyst/Engine/CGI.pm line 4.
Compilation failed in require at (eval 18) line 3.
...propagated at /usr/lib/perl5/5.8.8/base.pm line 85.
BEGIN failed--compilation aborted at Catalyst/Engine/HTTP.pm line 4.
Compilation failed in require at ./script/catapp_server.pl line 9.
BEGIN failed--compilation aborted at ./script/catapp_server.pl line 10.
Как вариант, можно попробовать собрать в Пэкадж ещё и сам Перл интерпретатор (дада, вы не ослышались!), делается это так pp -o имя_нового_пэкаджа_с_перлом catapp_server.par, но в моём случае это тоже не помогло.
Что же, пока принимаю поражение, но не сдаюсь.
Добавление: вообще, вариант проблему решить посредством виртулизации, например, на qemu -- т.е. собрать дистрибутив, в котором будет 1) ядро ОС 2) Перл 3) Всё необходимое для пуска Перла и в таком виде его раздавать :) Но тут возникает ещё большая куча проблем -- как быть с диском для виртулки, как работать с сетью и проч. Так что тоже для мелочи не вариант.
Часть инфы взята из: http://catalyst.infogami.com/cookbook/par
Сборка PAR пэкаджа для Catalyst приложения
Как известно, Каталист имеет туеву кучу зависимостей и развернуть его на системе, где разработка на перле производится впервые довольно проблематично и может вылиться часа в 3 времени, решение задачи довольно очевидно -- собрать все нужные модули и засунуть в архив вместе с аппликацией. Впрочем, так и поступает PAR (Perl Archive Toolkit), их офсайт тут: http://par.perl.org
Но, как многие могли догадаться, проблем мы огребём по полной в случае завязывания приложения на XS модули, которые, во-первых, не так легко перетащить, а во-вторых, не так легко заставить работать под разными платформами (у меня, например, рабочая машинка 32 битная, а почти все на работе -- 64 битные). Но на наше счастье, Каталист не требует XS расширений (разве что опциональное XS Stash для Template Toolkit). Ладно, давайте проверим PAR в деле, а там разберемся, какие проблемы вылезут.
Ставим сам PAR: sudo cpan PAR PAR::Packer
Собираем пэкадж: переходим в папку с нашим Каталист проектом и вызываем: perl Makefile.PL после этого запускаем make catalyst_par и ждём, пока Пэкадж соберётся.
Следовало бы заметить, что PAR пэкадж запустится далеко не на любой системе, по крайней мере нам будет нужен Perl и сам PAR (в идеале, конечно же, было бы заиметь его в менеджере пакетов, тогда развертывание Перл приложений вообще превратилось в нечто сверх банальное).
Не знаю как у вас, но у меня PAR пэкадж собрался и весит 1,7 мегабайта, что же, попробуем его запустить! Для запуска используется программа "parl" (отличие от "perl" во второй букве), ну что пускаем!
После запуска видим нечто вот такое:
Как подсказывает хелп, пускать надо вот так: parl catalystapp.par catalystapp_server.pl -p 80, делаем это и вуаля! Каталист аппликация пустилась и отлично работает! =)
Ну что же, попробую сейчас сделать наконец-то таки панель для нашего хостинга и проверить её развертывание таким образом.
Да, кстати, по поводу огребания от XS -- PAR складывает .so модули в папочку по имени /lib/auto/ (папочку?! да, вы угадали, PAR -- это обычный архив). Вот интересный вопрос будет, что произойдёт при запуске на платформе другой архитектуры, что же, это мы попробуем прямо сейчас, но опишу в другом посте.
Но, как многие могли догадаться, проблем мы огребём по полной в случае завязывания приложения на XS модули, которые, во-первых, не так легко перетащить, а во-вторых, не так легко заставить работать под разными платформами (у меня, например, рабочая машинка 32 битная, а почти все на работе -- 64 битные). Но на наше счастье, Каталист не требует XS расширений (разве что опциональное XS Stash для Template Toolkit). Ладно, давайте проверим PAR в деле, а там разберемся, какие проблемы вылезут.
Ставим сам PAR: sudo cpan PAR PAR::Packer
Собираем пэкадж: переходим в папку с нашим Каталист проектом и вызываем: perl Makefile.PL после этого запускаем make catalyst_par и ждём, пока Пэкадж соберётся.
Следовало бы заметить, что PAR пэкадж запустится далеко не на любой системе, по крайней мере нам будет нужен Perl и сам PAR (в идеале, конечно же, было бы заиметь его в менеджере пакетов, тогда развертывание Перл приложений вообще превратилось в нечто сверх банальное).
Не знаю как у вас, но у меня PAR пэкадж собрался и весит 1,7 мегабайта, что же, попробуем его запустить! Для запуска используется программа "parl" (отличие от "perl" во второй букве), ну что пускаем!
После запуска видим нечто вот такое:
parl catalystapp.par
Usage:
[parl] catalystapp[.par] [script] [arguments]
Examples:
parl catalystapp.par catalystapp_server.pl -r
myapp catalystapp_cgi.pl
Available scripts:
catalystapp_cgi.pl
catalystapp_create.pl
catalystapp_fastcgi.pl
catalystapp_server.pl
catalystapp_test.pl
Как подсказывает хелп, пускать надо вот так: parl catalystapp.par catalystapp_server.pl -p 80, делаем это и вуаля! Каталист аппликация пустилась и отлично работает! =)
Ну что же, попробую сейчас сделать наконец-то таки панель для нашего хостинга и проверить её развертывание таким образом.
Да, кстати, по поводу огребания от XS -- PAR складывает .so модули в папочку по имени /lib/auto/ (папочку?! да, вы угадали, PAR -- это обычный архив). Вот интересный вопрос будет, что произойдёт при запуске на платформе другой архитектуры, что же, это мы попробуем прямо сейчас, но опишу в другом посте.
Создание и запуск простейшего Catalyst приложения
Ну тут всё банально донельзя:
И после этого встроенный сервер Каталиста будет запущен, в чём можно убедиться, открыв в браузере страницу: http://127.0.0.1
catalyst.pl my_test_catalyst_app
cd my_test_catalyst_app/
script/my_test_catalyst_app_server.pl -reload -p 80
И после этого встроенный сервер Каталиста будет запущен, в чём можно убедиться, открыв в браузере страницу: http://127.0.0.1
Установка Perl фреймворка Catalyst на Debian 5 Lenny с Perl 5.10
Сначала ставим сам CPAN:
Теперь поставим всё необходимое для сборки XS модулей (написанных на С) и в т.ч.команду make:
Обновим сам CPAN:
Теперь обновим все Perl модули, имеющиеся в системе:
У меня не обновились лишь следующие модули, но т.к. я их не использую, мне это не интересно:
Ну и, наконец, поставим сам Catalyst:
Не знаю, как у Вас, но у меня не встал лишь модуль: Catalyst::Plugin::Session::State::URI
Который придётся поставить насильно:
После этого надо повторить команды, которые мы использовали для установки Каталиста.
В итоге нас должна встретить вот такая прелестная надпись:
Попутно возникла идея сделать свой аналог http://search.cpan.org/~mramberg/Task-Catalyst-3.0000/lib/Task/Catalyst.pm куда включить наиболее часто используемые, на мой взгляд, модули. Причем, как и ожидалось, пакетная инсталляция там решаться через толстый Makefile.PL :)
apt-get install perl
Теперь поставим всё необходимое для сборки XS модулей (написанных на С) и в т.ч.команду make:
apt-get install gcc make
Обновим сам CPAN:
cpan YAML Bundle::CPAN
Теперь обновим все Perl модули, имеющиеся в системе:
cpan
cpan_shell: upgrade
У меня не обновились лишь следующие модули, но т.к. я их не использую, мне это не интересно:
DB_File 1.816_1 1.819 PMQS/DB_File-1.819.tar.gz
B 1.17 1.19 NWCLARK/perl-5.8.9.tar.gz
Ну и, наконец, поставим сам Catalyst:
cpan Task::Catalyst Catalyst::Devel
Не знаю, как у Вас, но у меня не встал лишь модуль: Catalyst::Plugin::Session::State::URI
Который придётся поставить насильно:
cpan
cpan_shell: force install Catalyst::Plugin::Session::State::URI
После этого надо повторить команды, которые мы использовали для установки Каталиста.
В итоге нас должна встретить вот такая прелестная надпись:
Task::Catalyst is up to date (3.0000).
Catalyst::Devel is up to date (1.10)
Попутно возникла идея сделать свой аналог http://search.cpan.org/~mramberg/Task-Catalyst-3.0000/lib/Task/Catalyst.pm куда включить наиболее часто используемые, на мой взгляд, модули. Причем, как и ожидалось, пакетная инсталляция там решаться через толстый Makefile.PL :)
Sunday, 20 December 2009
Суперскоростная установка CPAN модулей
Для автоматического ответа на все запросы CPAN есть хак:
PERL_MM_USE_DEFAULT=1 cpan Catalyst
Subscribe to:
Posts
(
Atom
)
