Perl 为什么可以';我的Catalyst应用程序没有读取我的模板工具包文件吗?

Perl 为什么可以';我的Catalyst应用程序没有读取我的模板工具包文件吗?,perl,catalyst,template-toolkit,Perl,Catalyst,Template Toolkit,我正在尝试使用这个框架,但是我遇到了一些问题。我已将问题隔离到调用stat。在Template::Provider::init中,对stat的调用正常工作,但在其他函数中,对stat的调用返回[]。它似乎在做一些奇怪的缓存工作,但我不太明白是什么。有人有什么想法吗 编辑:更详细一点: 我正试图从Catalyst开发服务器转移到Apache/mod_perl。我得到一个无法呈现模板“文件错误-mytemplate.tt:notfound”错误。以下是我的配置的调试转储: Config do {

我正在尝试使用这个框架,但是我遇到了一些问题。我已将问题隔离到调用
stat
。在
Template::Provider::init
中,对
stat
的调用正常工作,但在其他函数中,对stat的调用返回[]。它似乎在做一些奇怪的缓存工作,但我不太明白是什么。有人有什么想法吗

编辑:更详细一点:

我正试图从Catalyst开发服务器转移到Apache/mod_perl。我得到一个
无法呈现模板“文件错误-mytemplate.tt:notfound”
错误。以下是我的配置的调试转储:

Config
do {
  my $a = {
    "Action::RenderView" => {
          ignore_classes => [
                              "DBIx::Class::ResultSource::Table",
                              "DBIx::Class::ResultSourceHandle",
                              "DateTime",
                            ],
          scrubber_func  => sub { "???" },
        },
    "Plugin::ConfigLoader" => {},
    home => "/home/myuser/pathtosite",
    name => "Stream",
    root => bless({
          dirs => ["", "home", "myuser", "pathtosite"],
          file_spec_class => undef,
          volume => "",
        }, "Path::Class::Dir"),
    static => {
          debug => 1,
          dirs => [],
          ignore_dirs => [],
          ignore_extensions => ["tmpl", "tt", "tt2", "html", "xhtml"],
          include_path => ['fix'],
          mime_types => {},
          mime_types_obj => bless({}, "MIME::Types"),
          no_logs => 1,
        },
  };
  $a->{static}{include_path}[0] = $a->{root};
  $a;
}

与某人在此处描述的问题几乎完全相同:

假设您的文件实际上位于
/home/myuser/pathtosite
目录(而不是子目录)中,这似乎可能是Catalyst进程无法读取其中的文件的一个外围问题。如果您在SELinux环境中运行,它也可能与安全上下文有关(例如,安全上下文类型
httpd\u sys\u content\u t


在Catalyst进程尝试呈现模板之前,您能否先进行一些调试,以确保文件在Catalyst进程中可见?

事实上,这几乎是必然的-如果您在Linux上使用的是系统Apache进程,而不是用户运行的进程,它可能以www_用户的身份运行,无法访问您的文件。我发现使用自运行进程进行开发效果更好,但您需要将其配置为高端口(1024+),因为只有root用户可以访问低端口。谢谢各位,这确实是正确的答案。这是一个许可问题。给以后阅读本文的人的提示:尝试使用strace对调试这类事情非常有帮助。它显示了进程进行的系统调用,在我的例子中,它显示了apache试图打开的文件以及权限拒绝错误。(
sudo strace httpd 2>&1 | grep hello.tt
成功了)