Apache2 下的催化剂应用程序mod_perl不会渲染梅森模板



我的应用程序根目录是/home/user/apps/learningcatalyst/CGAddressBook在该文件夹中,我有一个/mason文件夹,mason组件存储在其中我的视图位于/lib/cgaddressbook/View,在那里我有几个文件称为login_form和地址簿。

无法呈现组件"login_form" -错误是"无法找到初始路径'/login_form'的组件(组件根是:'/home/user/apps/learningcatalyst/CGAddressBook/lib/CGAddressBook/View')是我试图通过Apache到达网站时得到的错误。我的apache配置文件是

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被设置为写入其缓存)被用户、组和其他设置为读取、写入和执行。它的所有者是user。我已经重新启动Apache无济于事,我已经改变了文件夹所有者(递归地)的/View和/mason。

当运行script/cgaddressbook_server.pl -r -p3001并且我在端口3001上访问我的站点时,应用程序工作得很好。

comp_root的路径是指向模板"components"的路径。您似乎将它指向与"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;

除此之外,直接支持Mod Perl处理程序在Catalyst核心中已被弃用。

最好的方法是在应用程序自己的PSGI兼容服务器下启动应用程序,并使用"前端"web服务器将请求"代理"到该应用程序服务器。

必须在mod_perl环境下运行应用程序时,仍然建议在PSGI处理程序下运行。这里有一些注释是文档的一部分,但尚未建立在此。您可以使用那里的方法来指导您完成此操作。

相关内容

  • 没有找到相关文章

最新更新