Почему мое приложение Catalyst не может читать мои файлы Template Toolkit?

Я пытаюсь заставить структуру Catalyst работать с использованием _ 2_, и у меня проблемы с Template::Provider . Я выделил проблему для звонков на stat. В Template::Provider::_init вызовы stat работают правильно, однако в других функциях вызовы stat возвращают []. Кажется, что Template::Provider выполняет какие-то странные вещи кеширования, но я не могу выяснить что. У кого-нибудь есть идеи?

РЕДАКТИРОВАТЬ: Подробнее:

Я пытаюсь перейти с сервера разработки Catalyst на Apache / mod_perl. Я получаю Couldn't render template "file error - mytemplate.tt: not found" ошибку. Вот отладочный дамп моей конфигурации:

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;
}

Практически та же проблема, которую кто-то описал здесь: http://www.gossamer-threads.com/lists/catalyst/users/14888


person Sam Lee    schedule 13.09.2009    source источник


Ответы (1)


Предполагая, что ваши файлы на самом деле находятся в каталоге /home/myuser/pathtosite (а не в подкаталоге), похоже, что это может быть проблема временного интервала из-за того, что процесс Catalyst не может читать файлы там. Если вы работаете в среде SELinux, это также может иметь отношение к контексту безопасности (например, тип контекста безопасности httpd_sys_content_t).

Можете ли вы выполнить некоторую отладку, чтобы файлы были видны из процесса Catalyst в первую очередь, прежде чем он попытается отобразить шаблон?

person Adam Bellaire    schedule 13.09.2009
comment
Фактически, это почти неизбежно - если вы используете системный процесс Apache в Linux, а не тот, который запускается вашим пользователем, он, вероятно, будет работать как www_user и не будет иметь доступа к вашим файлам. Я считаю, что разработка с самостоятельным запуском работает лучше, но вам нужно настроить его на высокий порт (1024+), потому что только root имеет доступ к низким портам. - person ijw; 14.09.2009
comment
Спасибо, ребята - это действительно был правильный ответ. Это была проблема с разрешением. Совет для тех, кто прочитает это в будущем: попробуйте использовать strace, это очень полезно для отладки подобных вещей. Он показывает системные вызовы, которые выполняет процесс, и в моем случае он показал, что файл apache пытался открыть вместе с ошибкой отказа в разрешении. (sudo strace httpd 2>&1 | grep hello.tt сделал свое дело) - person Sam Lee; 14.09.2009