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

Reply via email to