Perl Catalyst - не удалось отобразить шаблон, не найден

Ошибка, которую я получаю на сервере разработки:

[info] *** Request 2 (0.000/s) [681] [Thu Dec 12 21:05:39 2013] ***
[debug] Path is "homescreen"
[debug] "GET" request for "homescreen" from "192.168.1.100"
[debug] Rendering template "homescreen/homescreen.tt2"
[error] Couldn't render template "homescreen/homescreen.tt2: file error - homescreen/homescreen.tt2: not found"
[error] Couldn't render template "homescreen/homescreen.tt2: file error - homescreen/homescreen.tt2: not found"
[debug] Response Code: 500; Content-Type: text/html; charset=utf-8; Content-Length: 14312
[info] Request took 0.033915s (29.485/s)
.------------------------------------------------------------+-----------.
| Action                                                     | Time      |
+------------------------------------------------------------+-----------+
| /homescreen                                                | 0.000341s |
| /end                                                       | 0.014055s |
|  -> Myproject::View::HTML->process                         | 0.013049s |
'------------------------------------------------------------+-----------'

Чем я занимаюсь:

У меня есть следующие Controller/Homescreen.pm:

package Myproject::Controller::Homescreen;

use strict;
use warnings;
use parent 'Catalyst::Controller';
use Data::Dumper;
use JSON;

__PACKAGE__->config->{namespace} = '';

sub homescreen :Path('/homescreen') :Args(0)  {

        my ( $self, $c ) = @_;
        print STDERR "IN THE HOMESCREEN ACTION\n";


        $c->stash({template => 'homescreen/homescreen.tt2',
                   title => 'Home Screen'
                 });
}

У меня есть следующие View/HTML.pm:

package Myproject::View::HTML;
use Moose;
use namespace::autoclean;

extends 'Catalyst::View::TT';

__PACKAGE__->config({
    #Changed default TT extension to TT2
    TEMPLATE_EXTENSION => '.tt2',
    render_die => 1,
});

Имею следующие lib/Myproject.pm:

__PACKAGE__->config(
    name => 'Myproject',
    # Disable deprecated behavior needed by old applications
    disable_component_resolution_regex_fallback => 1,
    #enable_catalyst_header => 1, # Send X-Catalyst header
);

__PACKAGE__->config(
        #Configure the view
        'View::HMTL' => {
                #Set the location for TT files
                INCLUDE_PATH => [
                        __PACKAGE__->path_to( 'root', 'src' ),
                ],
        },
);


# Start the application
__PACKAGE__->setup();

Затем у меня есть root/src/homescreen/homescreen.tt2 в моем каталоге Catalyst, который содержит весь мой html-код (в конечном итоге он будет использовать набор инструментов шаблона, но на данный момент это чисто html и javscript-код, который, как я знаю, в порядке).

На странице приложения в моем браузере появляется следующая ошибка:

Couldn't render template "homescreen/homescreen.tt2: file error - homescreen/homescreen.tt2: not found" 

Я пробовал использовать DEBUG => 'undef' в моем представлении HTML.pm, чтобы помочь с отладкой, но, похоже, не получил никаких дополнительных результатов.

Вероятно, есть что-то очень очевидное, что я не замечаю, но я не могу понять, что это такое.

Обновлять

Я только что заметил следующее в разделе Config экрана отладки моего браузера:

Конфигурация

  do {
  my $a = {
    "Action::RenderView" => {
      ignore_classes => [
                          "DBIx::Class::ResultSource::Table",
                          "DBIx::Class::ResultSourceHandle",
                          "DateTime",
                        ],
      scrubber_func  => sub { ... },
    },
    "disable_component_resolution_regex_fallback" => 1,
    "home" => "/home/fred/Myproject",
    "name" => "Myproject",
    "Plugin::ConfigLoader" => {},
    "Plugin::Static::Simple" => {
      debug => 1,
      dirs => [],
      ignore_dirs => [],
      ignore_extensions => ["tmpl", "tt", "tt2", "html", "xhtml"],   <---- IS THIS SIGNIFICANT AT ALL?
      include_path => [
        bless({
          dirs => ["", "home", "fred", "Myproject", "root"],
          file_spec_class => undef,
          volume => "",
        }, "Path::Class::Dir"),
      ],
      mime_types => {},
      mime_types_obj => bless({}, "MIME::Types"),
      no_logs => 1,
    },
    "root" => 'fix',
    "stacktrace" => { context => 3, verbose => 0 },
    "static" => 'fix',
    "View::HMTL" => {
      INCLUDE_PATH => [
        bless({
          dirs => ["", "home", "fred", "Myproject", "root", "src"],
          file_spec_class => undef,
          volume => "",
        }, "Path::Class::Dir"),
      ],
    },
  };
  $a->{"root"} = $a->{"Plugin::Static::Simple"}{include_path}[0];
  $a->{"static"} = $a->{"Plugin::Static::Simple"};
  $a;
}

Я так понимаю, это означает, что он игнорирует мой файл шаблона, потому что он имеет расширение .tt2?

Однако я нигде в моем проекте Catalyst не устанавливаю этот атрибут ignore_extensions? Это причина моей проблемы или что-то совершенно не связанное с этим?


person yonetpkbji    schedule 12.12.2013    source источник
comment
Вы пользователь root? Возможно, ваш веб-сервер не работает с правами root и поэтому не может найти шаблон. Попробуйте загрузить CWD и позвольте поместить что-нибудь вроде die cwd; в ваш контроллер, чтобы увидеть, где работает ваш материал. Если он находится в домашнем каталоге другого пользователя, скорее всего, у этого пользователя нет разрешения на чтение файлов в /root.   -  person simbabque    schedule 13.12.2013
comment
Я проверял права доступа к файлам перед публикацией (о чем я забыл упомянуть). Кроме того, я просто попытался запустить сервер разработки как root, но это не имело никакого значения. Я все еще получаю то же сообщение об ошибке. Есть другие идеи? Благодарность   -  person yonetpkbji    schedule 13.12.2013
comment
Выгрузите __PACKAGE__->config->{'View::HTML'} в STDERR и убедитесь, что путь соответствует ожидаемому.   -  person RET    schedule 13.12.2013
comment
Вы пытались указать полный путь к вашему шаблону в контроллере?   -  person Fotis_zzz    schedule 13.12.2013
comment
Также попробуйте удалить root из ПАКЕТА - ›path_to в файле lib / Myproject.pm   -  person Fotis_zzz    schedule 13.12.2013
comment
Шаблон должен находиться в каталоге root / src / homescreen в каталоге проекта Catalyst, а не в каталоге / root / src / homescreen.   -  person dgw    schedule 14.12.2013
comment
@dgw - Извините, мой шаблон находится в 'root / src / homescreen' в каталоге проекта катализатора ... это была опечатка с моей стороны, которую теперь отредактировали, спасибо   -  person yonetpkbji    schedule 21.12.2013
comment
@RET - При использовании print STDERR __PACKAGE__->config->{'View::HTML'};, как вы предложили, я получаю сообщение об ошибке в выводе отладки Catalyst Use of uninitialized value in print at /home/fred/MyProject/script/../lib/MyProject/Controller/Homescreen.pm line 10.   -  person yonetpkbji    schedule 21.12.2013
comment
Ну, я действительно имел в виду print STDERR Dumper(__PACKAGE__->..), но, возможно, еще слишком рано для того, чтобы это работало правильно. Проблема решена?   -  person RET    schedule 21.12.2013
comment
Нет, проблема все еще не устранена, проблема по-прежнему Couldn't render template.... Я уверен, что это должно быть что-то очевидное, но не вижу, что ...   -  person yonetpkbji    schedule 21.12.2013
comment
Совершенно уверен, что это не проблема с разрешениями, потому что я изменил весь каталог на 777 с chmod -R <permissionsettings> <dirname>, чтобы убедиться, но все равно ничего не изменилось.   -  person yonetpkbji    schedule 21.12.2013
comment
Только что нашел что-то, что может иметь или не иметь значение, пожалуйста, посмотрите обновление моего вопроса ... большое спасибо   -  person yonetpkbji    schedule 21.12.2013
comment
Ignore_extensions предназначен только для плагина Static :: Simple, так что проблема не в этом. См. Ответ ниже для решения :-)   -  person asjo    schedule 22.12.2013


Ответы (1)


Похоже, ваша конфигурация не действует. Попробуйте поместить свой шаблон в root/homescreen/homescreen.tt2 вместо root/src/homescreen/homescreen.tt2, и Catalyst его найдет.

Ах, у вас опечатка в вашей библиотеке / Myproject.pm:

__PACKAGE__->config(
        #Configure the view
        'View::HMTL' => {

Попробуйте вместо этого 'View::HTML' (обратите внимание, что у вас HMTL - неправильное написание).

person asjo    schedule 21.12.2013
comment
Отличное место, спасибо ... Я ожидал, что это будет что-то очевидное, но не совсем такое очевидное ... сколько раз я смотрел на это, я должен был заметить это - еще раз спасибо - person yonetpkbji; 22.12.2013
comment
Первая теорема RET: проблема с отладкой - это последнее, о чем вы могли бы подумать. :-) - person RET; 23.12.2013