我的应用程序根目录是/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处理程序下运行。这里有一些注释是文档的一部分,但尚未建立在此。您可以使用那里的方法来指导您完成此操作。