我的应用程序根目录是/ 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端口访问我的站点。
答案 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是尚未构建的文档的一部分。您可以使用那里的方法来指导您这样做。