2010-05-04 73 views
0

我已經將一個Perl CGI應用程序從一個Web主機移動到另一個Web主機。一切運行良好,除了模板Tookit這是給出以下錯誤:如何在Perl的Template Toolkit中追蹤「Template process failed:undef error」?

「模板進程失敗:undef錯誤 - 這不應該發生在/usr/lib/perl5/5.8.8/CGI/Carp.pm行314 「。

該模板在其他Web主機上正常工作。在創建模板對象時,我已經設置了DEBUG_ALL標誌,但是它沒有提供任何關於只是加載調試輸出的錯誤的附加信息。

我無法發佈模板源,因爲它裏面有很多客戶端特定的東西。

我寫了一個簡單的測試模板,並且工作正常。只是想知道如果有人之前看過這個錯誤,或者有任何想法找到解決辦法的最快方法。

編輯:這是加載和處理模板的代碼片段。

my $vars  = {}; 
$vars->{page_url}   = $page_url; 
$vars->{info}    = $info; 
$vars->{is_valid}   = 0; 
$vars->{invalid_input} = 0; 
$vars->{is_warnings}  = 0; 
$vars->{is_invalid_price} = 0; 
$vars->{output_from_proc} = $proc_output; 
... 

my $file = 'clientTemplate.html'; 

#create ref to hash 
use Template::Constants qw(:debug); 


my $template = Template->new(
{ 
    DEBUG => DEBUG_SERVICE | DEBUG_CONTEXT | DEBUG_PROVIDER | DEBUG_PLUGINS | DEBUG_FILTERS | DEBUG_PARSER | DEBUG_DIRS, 
    EVAL_PERL => 1, 
    INCLUDE_PATH => [ 
     '/home/perlstuff/templates', 
    ], 
} 
); 

$template->process($file, $vars) 
    || die "Template process failed: ", $template->error(), "\n"; 
+0

你可以請張貼哪個調用模板的Perl代碼? – 2010-05-04 15:07:46

回答

4

您可能會嘗試使用Devel::SimpleTrace來獲取堆棧跟蹤代碼出現錯誤時的位置。也許這會讓你更好地瞭解發生的事情。

+1

謝謝布賴恩,我會放棄這一點。 – FunLovinCoder 2010-05-04 17:43:15

+1

這個技巧。堆棧跟蹤顯示問題是從Template :: Plugin :: Wrap調用的Text :: Wrap :: wrap。我刪除了插件(我可以不用管理),並開始工作。我從來沒有聽說過Devel :: SimpleTrace感謝告訴我這件事。 – FunLovinCoder 2010-05-04 18:39:38

相關問題