Anya wrote:
I have changed the script to:
sub show_template #parse it right now
{
my $template_file = shift;
my $vars_hashref = shift ;
my $tt;
print "in show_template 1<br>";
$tt = Template->new({
INCLUDE_PATH => ["$root/cgi-bin"],
INTERPOLATE => 1,
}) || do{ print "inside error" ; } ;
print "in show_template 2<br>";
$tt->process($template_file, $vars_hashref) ;
}
at the beginning of the file:
#!/usr/bin/perl
I would add a -w to that line. Warnings often tell you things that
nothing else does.
Also, do a "warn "foo" in there somewhere, to make sure that the error
log you are reading is the one that this would be putting its errors to.
[begin way, way, wild speculation]
Is $root defined and equal to what you want it to be? If not you are
looking in root and maybe your setup is so secure that it
unceremoniously kills you if a web process tries reading where it shouldn't?
[end]
Very strange. Could the CGI::Carp be getting involved somewhere in
sucking up/hiding your [EMAIL PROTECTED] I would be very surprised if something
interfered when you are explicitly evaling it yourself, but then, people
think up very clever ways to do things in Perl since it lets you.
mike
use strict;
use Template;
use CGI::Carp qw(fatalsToBrowser);
use diagnostics;
$|=1;
and the calling for the subroutine is:
eval{
&show_template("some_template.html",$vartoparse);
};
if ($@) {
if (UNIVERSAL::isa($@, "Template::Exception")) {
## error came from Template or below
if ([EMAIL PROTECTED]>type eq "undef") { # yes, the letters u n d e f!
print "error1"[EMAIL PROTECTED]>info; # the error from below Template
(perl
code plugins)
} else {
## the error came from a Template step, do what you want
print "error2" . "$@"; # stringifies the Template error
}
} else {
## the error came from above Template (something else in the eval)
print "error3". $@; # throw it again
}
}
But the output from the xx.cgi is just:
in show_template 1
without any other out put. even the eval doesn't capture the error.... There
is no error at the server's errorlog either.
Anya wrote:
Thanks Lance for your reply.
I have already put $|=1 at the beginning of the script. Actually the
output
is not blocked.
And I have changed the script to:
sub template_parse
{
my $template_file = shift;
my $vars_hashref = shift;
print 'before creating Template->new';
my $tt = Template->new({INTERPOLATE => 1, INCLUDE_PATH =>
["$root/cgi-bin"]}) ||
do{ open F, ">$root/cgi-bin/errorlog.txt"; print F "$Template::ERROR\n";
close F;};
you aren't checking here to see if you sucessfully opened the file. Is
$root undef at this point, possibly? Do you have warnings on?
Also I would use "warn" for debugging output, then you don't have to
worry about whether $| is set or not, and if you give warn() input that
doesn't end in newline, it will give you a handy line and file name so
you can find the debug statements later.
print 'after creating Template->new';
my $parsed;
$tt->process($template_file, $vars_hashref, \$parsed) or die
$$tt->error;
return \$parsed;
}
after call the template_parse subroutine, there is no errorlog.txt exist
at
all and the output is still the same. It looks like the program exit
inside
the Template->new and it get lost.
It could be the problem of server resource shortage?
----- Original Message -----
From: "Lance Braswell" <[EMAIL PROTECTED]>
To: "Anya" <[EMAIL PROTECTED]>
Sent: Tuesday, July 05, 2005 2:32 PM
Subject: Re: [Templates] very strange Template->new behave
Try running with $|++ at the top of your script. Maybe
it's making it past the new and your program is
blocking on writing to the $template_file. Since
stdout may be buffered you aren't seeing it.
Alternately write the debug output to a file.
--- Anya <[EMAIL PROTECTED]> wrote:
Hi,
I have a strange problem on Template->new() method
on Template Toolkit in a cgi script.
The program just stops at Template->new() instead of
creating a new object. Could anybody give me some
clues on how to resolve it?
Thanks in advance.
Anya
The program looks like:
sub template_parse
{
my $template_file = shift;
my $vars_hashref = shift;
print 'before creating Template->new';
my $tt = Template->new({INTERPOLATE => 1,
INCLUDE_PATH => ["$root/cgi-bin"]}) || die
"$Template::ERROR\n";
print 'after creating Template->new';
my $parsed;
$tt->process($template_file, $vars_hashref,
\$parsed) or die $$tt->error;
return \$parsed;
}
The output is
before creating Template->new
it stops at my $tt.....; and no error message shows.
This subroutine is inside a cgi script with a https
request to another server with XML format. Template
toolkit is used to display the response.
The same subroute works at other cgi scripts without
https request.
____________________________________________________
Yahoo! Sports
Rekindle the Rivalries. Sign up for Fantasy Football
http://football.fantasysports.yahoo.com
_______________________________________________
templates mailing list
[email protected]
http://lists.template-toolkit.org/mailman/listinfo/templates
--
-----------------------------------------
Name : Mike South
Title : Software Developer
Company : McClatchy Interactive
Work Phone : (919) 861-1259
Work Fax : (919) 861-1300
Work Email : [EMAIL PROTECTED]
AIM : msouthmi
Web Site : http://www.mcclatchyinteractive.com/
-----------------------------------------
--
-----------------------------------------
Name : Mike South
Title : Software Developer
Company : McClatchy Interactive
Work Phone : (919) 861-1259
Work Fax : (919) 861-1300
Work Email : [EMAIL PROTECTED]
AIM : msouthmi
Web Site : http://www.mcclatchyinteractive.com/
-----------------------------------------
_______________________________________________
templates mailing list
[email protected]
http://lists.template-toolkit.org/mailman/listinfo/templates