Apache2 mod_perl下的Catalyst应用程序不会呈现Mason模板

时间:2014-03-21 17:25:10

标签: perl apache2 catalyst mason

我的应用程序根目录是/ home / user / apps / learningcatalyst / CGAddressBook 在该文件夹中,我有一个/ mason文件夹,其中存储了mason组件 我的View位于/ lib / CGAddressBook / View中我有一些名为login_form和addressbook的文件。

无法渲染组件" login_form" - 错误是"无法找到初始路径的组件' / login_form' (组件根源是:' / home / user / apps / learningcatalyst / CGAddressBook / lib / CGAddressBook / View') 是我尝试通过Apache访问网站时遇到的错误。我的apache conf文件是

PerlSwitches -I/home/user/apps/learningcatalyst/CGAddressBook/lib
PerlModule CGAddressBook

<Location /user_catalyst/>
    SetHandler modperl
    PerlResponseHandler CGAddressBook
</Location>

DocumentRoot /home/user/apps/learningcatalyst/CGAddressBook/root
<Location /user_catalyst/static>
    SetHandler default-handler
</Location>

所有文件夹均可由用户,其组和其他文件夹读取。将Mason设置为写入其缓存的mason文件夹设置为由用户,组和其他人读取,写入和执行。它的主人是用户。 我已经重新启动Apache无济于事,我已经更改了/ View和/ mason的文件夹所有者(和递归)。

运行脚本/ cgaddressbook_server.pl -r -p3001时,应用程序运行正常,我在3001端口访问我的站点。

1 个答案:

答案 0 :(得分:1)

comp_root 的路径是模板“组件”的路径。您似乎将其指向与“View”包相同的目录。你“可能”实际上有那些组件,但这不是一个好的做法。

未指定此内容的默认位置应为Catalyst项目结构中的“root / comps”文件夹(或类似内容)。我自己的一个样本是这样的:

package SnakierTen::Web::View::HTML;
use Modern::Perl;
use Moose;
use MooseX::NonMoose;

extends 'Catalyst::View::Mason2';

around BUILDARGS => sub {
    my ( $orig, $class, $c, @args ) = @_;

    $class->config(

        comp_root => $c->path_to( 'root' ),
        data_dir  => $c->path_to( 'data' ),

        plugins => [
            'TidyObjectFiles',
            'HTMLFilters',
        ],
    );

    $class->$orig( $c, @args );

};

__PACKAGE__->meta->make_immutable;
no Moose;
1;

除此之外,在Catalyst核心中不推荐直接支持Mod Perl处理程序。

最受欢迎的方法是在其自己的PSGI兼容服务器下启动应用程序,并使用“前端”Web服务器“代理”对此应用程序服务器的请求。

如果必须在mod_perl环境下运行应用程序,仍建议在PSGI处理程序下运行。有一些注释here是尚未构建的文档的一部分。您可以使用那里的方法来指导您这样做。