0

我的应用程序根目录是该文件夹中的 /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 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 的文件夹所有者(并递归地)。

该应用程序在运行 script/cgaddressbook_server.pl -r -p3001 时运行良好,我在端口 3001 上访问我的站点。

4

1 回答 1

1

comp_root的路径是模板“组件”的路径。您似乎将其指向与“查看”包相同的目录。您“可能”实际上在那里拥有组件,但这并不是一个好习惯。

未指定的默认位置应该是 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 处理程序下运行。这里有一些注释是尚未在此基础上构建的文档的一部分。您可以使用那里的方法来指导您执行此操作。

于 2014-03-31T09:26:38.353 回答