http://recoder.livejournal.com/ говорит: 2.02.2009 в 14: 29>> Вот как раз то, что Catalyst даёт свободу и является одновременно его сильной и слабой сторонами.>> Многим разработчикам хотелось бы для каждой проблемы видеть простое и единственное решение.Мне лично намного важнее выбрать из нескольких вариантов самый наилучший для конкретной задачи. Простые решения есть, но разве плохо, что они не единственные? Да, конечно же реализаций шаблонизаторов, ORMов, и средств валидациирендеринга форм целая куча. Но, самые популярные это: ORM: Class: DBI (CDBI), DBIx: Class (DBIC), Rose: DB: Object (RDBO) Шаблонизаторы: HTML: Template, HTML: Mason, Template-Toolkit. Средства обработки и валидации форм: Form: Processor, CGI: FormBuilder, HTML: FormFu, Rose: HTML: Form. Это самые популярные решения. И я думаю, что их не так уж много. Но, этот список можно еще сократить: Учитывая то, что DBIC и CDBI очень похожи по функционалу и подходу, и при этом DBIC по мощьнее будет, то Class: DBI вычеркиваваем. RDBO — это хорошая альтернатива DBIx: Class. Сам сейчас пишу на RDBO. Какой самый легковесный многофункциональный и просто красивый и удобный шаблонизатор? — Template-Toolkit. Form: Processor это попытка упростить Rose: HTML: Form. Честно говоря, не знаю стоит ли что вычеркивать. Но, вот CGI: FormBuilder можно вычеркнуть, так как HTML: FormFu обладает схожим, и более продвинутым и гибким функционалом. Что остается? ORM: DBIx: Class, Rose: DB: Object (RDBO) Шаблонизаторы: Template-Toolkit. Средства обработки и валидации форм: Form: Processor/Rose: HTML: Form, HTML: FormFu. Надежный и мощный союз для создания веб приложения. Все эти модули интегрируются с Каталистом. На самом деле решений для Каталиста много, но самые лучшие, на мой взгляд, перечислены выше.
Попробуйте так: $c-> user-> get-> {username}
1, 2 $dbh нужно передавать через stash либо всегда пользоватся $c-> model (’DBI’) -> dbh; т.е.
sub begin : Private { my ($self, $c) = @_; my $dbh = $c->model('DBI')->dbh; <strong>$c->stash->{'dbh'} = $dbh;</strong>...}sub end : Private { my ($self, $c) = @_; $c->forward('MyApp::View::HTML::Template');<strong> my $dbh = $c->stash->{'dbh'}; $dbh->disconnect();</strong>}
А на счет примеров, то вот: http://github.com/jrockway/Вот исходники его блога. Это вам может помочь. http://github.com/jrockway/ang...Прямо на Гитхабе можно поискать проекты на Каталисте. Вот еще сайт. Там можно загрузить его исходники (внизу) http://godcore.org.ua/и блог: http://vti.godcore.org.ua/Вот еще проект: http://handelframework.com/blo.../Вот его исходники: http://github.com/claco/handel...Вот про Git
1, 2 $dbh нужно передавать через stash либо всегда пользоватся $c-> model (’DBI’) -> dbh; т.е. sub begin: Private { my ($self, $c) = @_; my $dbh = $c-> model (’DBI’) -> dbh; $c-> stash-> {’dbh’} = $dbh; ...} sub end: Private { my ($self, $c) = @_; $c-> forward (’MyApp: View: HTML: Template’); my $dbh = $c-> stash-> {’dbh’}; $dbh-> disconnect (); } А на счет примеров, то вот: http://github.com/jrockway/Вот исходники его блога. Это вам может помочь. http://github.com/jrockway/ang...Прямо на Гитхабе можно поискать проекты на Каталисте. Вот еще сайт. Там можно загрузить его исходники (внизу) http://godcore.org.ua/и блог: http://vti.godcore.org.ua/Вот еще проект: http://handelframework.com/blo.../Вот его исходники: http://github.com/claco/handel...Вот про Git
Я какую-то фигню в
package Catalyst::Model::DBI;# … { … Skip ... } =item $self->dbhReturns the current database handle.=cutsub dbh {return shift->stay_connected;}
Так что будьте осторожны с сохранением значения $dbh. Что же касается вопроса по поводу ACL, то ответить не могу, так как в данном случае необходим исходный код приложения.
А что это за /add1 и /add2, это контроллеры или экшены? Дайте-ка сюда вашу табличку наподобии этой:
[debug] Loaded Path actions:.-------------------------------------+--------------------------------------.| Path | Private |+-------------------------------------+--------------------------------------+| / | /default || / | /index || /add1 | /admin/add1 || /add2 | /admin/add2 || /admin | /admin/index || /user | /user/index || /user/log_as_admin | /user/log_as_admin || /user/log_as_user | /user/log_as_user |'-------------------------------------+--------------------------------------'
Сразу скажу, что в правилах ACL нужно указывать значение из колонки «Private». Т.е. если у меня есть /add1, то в ACL нужно указать /admin/add1
Так, хорошо, тогда скиньте еще ваши ACL правила. У меня такое предчувствие, что одно попросту перекрывает другое. Попробуйте создать похожую структуру вашего приложения с вашими ACL правилами вот в этой пустышке: demo-0.01.tar.gz (поправьте demo_server.pl (путь к перлу) и установите необходимые модули) Если оно будет работать там, то значит проблема может быть скрыта где-то в плагине аутотентификации. Если же оно по прежнему не будет работать как надо — то проблема в ACL правилах, и их нужно будет переделать. Что же касается вопроса по Rose: DB: Object — то это просто Маппер (ORM), который работает вне Каталиста, и соответственно просто «забивает» на эти доступы, если, конечно, вы сами не допишете нужный код. Зато очень помогает если много таблиц и отношений (relations) между этими таблицами. Если вы решитесь его использовать, то советую прочитать весь Rose: DB: Object: Tutorial перед началом серьезной работы с ним, это поможет избежать нескольких граблей. В целом, работа с ним намного приятней и проще чем с DBI.
В своих целях, я использую Apache 1.3.41, под который я успешно настроил FastCGI, и запуск Каталист-приложений, по переведенному Вами мануалу на CPAN. Со вторым Апачем у меня действительно были проблемы, правда немного другого характера, чем описанные вами и мне пришлось от него пока отказаться.
$ perl script/%app%_server.pl -r
Тогда он будет перегружаться после изменений кода.
1O_O контроллеров? Круто;) Да, конечно можно их сделать иерархичными, по типу MyApp: Controller: Blog: Add, MyApp: Controller: Blog: Edit и т.д. без проблем. Можно даже немного похачить Каталист, чтобы у вас было несколько папок «Controller». Я писал про это вот тут: Но, ни разу не применял, так как посчитал что это слишком грязный хак:)
Можно не удалять, а архивировать или перемещать в другую папку. Главное, чтобы письма не нужные сейчас не мозолили глаза в Inbox.
Gladimdim, Да, я раньше использовал фоловапы для маркировки особо важных писем. У меня их было около сотни. Это не эффективно. Еще раз хочу сказать, что папку @action я использую для того, что я буду делать сегодня, @waiting_for — для того что планирую делать в ближайшее время. Фоловапы не дают такой функциональности, но я их использую для отметки важности письма. Есть письма, которые можно удалить. Скажем, если идет какой-то thread переписки, то старые письма можно удалить, так как они уже есть в новых. Есть рассылки, которые вам особо не нужны. Некоторые письма, я перетаскиваю в @notes, если считаю их хоть более менее важными, и не хочу удалять. Моя задача за день — освободить папку @action. Если я это сделал — то могу идти домой без угрызений совести по недоделанной работе. Это ваше право судить «о чем» статья или «ниочем», мне этот простой способ очень помог, и использую его не одну неделю. Я просто хотел поделиться.
Redron, я соглашусь, что для статьи это не дотягивает. Но, мне кажется, что и на форуме моей заметке не место. Я называю это «заметкой», в принципе что-то среднее между статьей и топиком на форуме, ИМХО.
Frenzy Delirium, >> Я конечно понимаю, что у тестеров лейтмотив «чем больше тем лучше», но в данном >> случае "лучше меньше, да лучше«Какая все таки хорошая фраза. У тестеров лейтмотив действительно «чем больше тем лучше», и на то у нас есть свои причины. Но, в разумных приделах, конечно больше, и чтобы действительно было лучше:). На счет «лучше меньше, да лучше», ну нет. Не согласен. Я хочу, чтобы ресурс обновлялся. По крайней мере, каждый день по одной заметке или статье. Сейчас, лично для меня, планета и статьи — это самое интересное что есть на ДОУ. Вашу критику, Frenzy Delirium, на счет серой банальщины, я принимаю, тем более что, судя по оценкам и комментариям, не только вы так думаете. Но, кроме критики, также предлагаю, написать свою статью, когда, конечно, будет желание и вдохновение, чем вы безусловно подтвердите знание технологий, указанных в вашем профиле. Мне бы было интересно почитать новую статью/заметку по каждой указанной вами технологии/ОС/ЯП.
Перепробовал несколько плагинов для аутлука, группировал письма по Subject, но желаемого эффекта по группировке цепочек, как в Gmail, добиться не смог. Сейчас то, на что мне нужно ответить (если не могу ответить сразу же), либо важную информацию переношу в отдельные папки. Пока что, это самый эффективный для меня способ.
DiGiTAL, нет, конечно две папки не заменят трекер. Мы тоже, юзаем трекеры. Но, есть таски не такие глобальные, которые туда просто не попадают, и решаться по почте. После того как завершил задачу — отписался и референс есть в папке «Sent». А на счет «глобальных» тасков, я просто выбираю из трекера все то, что буду делать сегодня, и шлю себе письмо. Когда сделаю — отпишусь в трекере и удалю свое письмо. И на счет удаления писем, согласен, удалять все без разбору не нужно. Я если в чем-то сомневаюсь, то просто переношу письмо в папку @notes, главное, чтобы Inbox был чистым и не отвлекал кучей не разобранных писем.
Спасибо, это замечательный перевод хорошей статьи
Не могу сказать точно, почему дерево создается только один раз. Возможно, вы используете глобальные переменные для хранения экземпляра объекта DBIx: Tree. Возможно, это баг самого модуля. В любом случае, да, из DBIx: Tree нужно сделать отдельную модель. Рекомендую воспользоваться Catalyst: Model: Adaptor. Попробуйте сделать модель, и возможно, проблема решится сама собой;) На счет mod_perl’a и FCGI, посмотрите на indigoPerl или XAMPP, там уже предустановленны и сконфигурированы такие вещи как mod_perl, FastCGI, SSL и еще много чего полезного...