perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From André Warnier ...@ice-sa.com>
Subject Re: Custom Object-Oriented Module using HTML::Template
Date Thu, 13 Mar 2008 15:58:25 GMT
Hi.

I know it's not clean, and it is probably not what you need to do in the 
long run, and I don't know a bit about HTML::Template.
But why don't you try the following, just to check :

 >>>>> package Myserver::Handler;
 >>>>>
 >>>>> #Setup some essentials
 >>>>> use strict;         #strict tolerance for code
 >>>>> use Carp;           #debugging
 >>>>> use diagnostics;    #more debugging
 >>>>> use warnings;       #more debugging

 >>>>> #Handler-related stuff
 >>>>> use Apache2::RequestRec ();
 >>>>> use Apache2::RequestIO ();
 >>>>> use Apache2::Const -compile => qw(OK);

 >>>>> use HTML::Template;

 >>>>>
 >>>>> sub handler {
 >>>>>     my $self        = shift;
 >>>>>     $self->content_type('text/html');
 >>>>>
 >>>>>     my $template    = HTML::Template->new(
 >>>>> 		filename => '/home/Perl/tmpl/mainpage.tmpl',
 >>>>>                 cache => 1,
 >>>>>                 debug => 1,
 >>>>>                 stack_debug => 1 );

 >>>>>     print $template->output;
 >>>>>
 >>>>>     # Obligatory stuff for the handler
 >>>>>     return Apache2::Const::OK;
 >>>>>
 >>>>> }

André

xyon wrote:
> Good suggestion, I moved the content_type to the top of the handler
> routine in Handler.pm, so it now looks like:
> 
> -------------------------------------------------------------------
> sub handler {
>     my $self        = shift;
>     $self->content_type('text/html');
>     
>     my $view        = Myserver::View->new();
>     $view->mainpage;
> 
>     # Obligatory stuff for the handler
>     return Apache2::Const::OK;
> }
> -------------------------------------------------------------------
> 
> 
> 
> I am still getting a blank page, though. Here is the latest lwp-request
> output:
> 
> 
> -------------------------------------------------------------------
> $ lwp-request -s -U -S -e -m GET "http://localhost/admin/"
> GET http://localhost/admin/
> User-Agent: lwp-request/2.07
> 
> GET http://localhost/admin/ --> 200 OK
> Connection: close
> Date: Thu, 13 Mar 2008 15:45:08 GMT
> Server: Apache
> Content-Length: 0
> Content-Type: text/html; charset=UTF-8
> Client-Date: Thu, 13 Mar 2008 15:45:09 GMT
> Client-Peer: 127.0.0.1:80
> Client-Response-Num: 1
> -------------------------------------------------------------------
> 
> 
> 
> On Thu, 2008-03-13 at 16:38 +0100, André Warnier wrote:
>> Hi.
>>
>> First, don't take my suggestions as gospel, I don't know the TT2 and do 
>> not really know how you're supposed to work with it.
>> But it seems to me that this is in the wrong order :
>>
>>      $view->mainpage;
>>      $self->content_type('text/html');
>>
>> I think you should trigger the HTTP header before you generate the 
>> content.  Now, whether that is the reason of your current problem or 
>> not, I haven't a clue.
>>
>> But I'm trying, and I'm really interested, because I am starting to want 
>> to know more about TT2 (and Catalyst) these days.  So your 
>> "from-the-very beginning" approach is also very helpful to me.
>> (And I do have a certain experience of Apache2/mod_perl2)
>>
>> And, re-check your lwp-request switches, you might have disabled the 
>> display of the response content (remove the -d).
>>
>> André
>>
>>
>>
>> xyon wrote:
>>> Thanks for the reply.
>>>
>>> I thought as you did (that there were too many "Content-Type"
>>> definitions), so commented out this line in the View.pm module, but that
>>> doesn't seem to have changed anything:
>>>
>>> 'print "Content-Type: text/html\n\n";'
>>>
>>>
>>>
>>>
>>> Here is the lwp command and output:
>>> -------------------------------------------------------------------
>>> $ lwp-request -e -S -s -U -m GET -Sed "http://localhost/admin/"
>>> GET http://localhost/admin/
>>> User-Agent: lwp-request/2.07
>>>
>>> GET http://localhost/admin/ --> 200 OK
>>> Connection: close
>>> Date: Thu, 13 Mar 2008 15:24:23 GMT
>>> Server: Apache
>>> Content-Length: 0
>>> Content-Type: text/html; charset=UTF-8
>>> Client-Date: Thu, 13 Mar 2008 15:24:23 GMT
>>> Client-Peer: 127.0.0.1:80
>>> Client-Response-Num: 1
>>> -------------------------------------------------------------------
>>>
>>>
>>> On Thu, 2008-03-13 at 16:11 +0100, André Warnier wrote:
>>>> Hi.
>>>>
>>>> First, a small disgression : along with perl, comes a beautiful test 
>>>> tool for HTTP stuff, called "lwp-request".
>>>> Like, at the command-line :
>>>> lwp-request  (to see the options)
>>>> lwp-request -m GET -Sed "http://myserver/myURL"
>>>> (that will show you what you get as a response, without a browser 
>>>> getting in the way)
>>>>
>>>> Then, below, are you not now sending one "Content-type" too many ?
>>>> It looks like you are doing it once in handler(), and once in mainpage().
>>>>
>>>> André
>>>>
>>>> xyon wrote:
>>>>> That worked great with the test script ( print $template->output;
), but
>>>>> unfortunately, I'm having trouble getting the display onto a web page
>>>>> (via the Handler). The resulting web page is blank, with no source.
>>>>>
>>>>>
>>>>> Below are my Apache configs for the handler, logs, and the handler and
>>>>> view module's latest code. I've also included the test script code, just
>>>>> in case there is some obvious reason it would work and the handler
>>>>> won't.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Apache config:
>>>>> ----------------------------------------------------
>>>>> PerlRequire /etc/httpd/perl/startup.pl
>>>>> <Location /admin>
>>>>>     SetHandler modperl 
>>>>>     PerlResponseHandler Myserver::Handler
>>>>> </Location>
>>>>> ----------------------------------------------------
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> /etc/httpd/perl/startup.pl:
>>>>> ----------------------------------------------------
>>>>> use lib qw(/home/Perl/);
>>>>> 1;
>>>>> ----------------------------------------------------
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Apache log:
>>>>> ----------------------------------------------------
>>>>> ==> /var/log/httpd/error_log <==
>>>>> ### HTML::Template Debug ### In _parse:
>>>>> ### HTML::Template _param Stack Dump ###
>>>>>
>>>>> $VAR1 = [
>>>>>           \'<html><body bgcolor="#FF00FF">Test!</body></html>
>>>>> '
>>>>>         ];
>>>>>
>>>>> ### HTML::Template Debug ### In output
>>>>> ### HTML::Template output Stack Dump ###
>>>>>
>>>>> $VAR1 = [
>>>>>           \'<html><body bgcolor="#FF00FF">Test!</body></html>
>>>>> '
>>>>>         ];
>>>>>
>>>>>
>>>>> ==> /var/log/httpd/ssl_request_log <==
>>>>> [13/Mar/2008:10:48:38 -0400] 10.5.5.5 TLSv1 DHE-RSA-AES256-SHA
>>>>> "GET /admin/ HTTP/1.1" -
>>>>>
>>>>> ==> /var/log/httpd/ssl_access_log <==
>>>>> 10.5.5.5 - - [13/Mar/2008:10:48:38 -0400] "GET /admin/ HTTP/1.1" 200
-
>>>>> ----------------------------------------------------
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> /home/Perl/Myserver/Handler.pm
>>>>> ----------------------------------------------------
>>>>> package Myserver::Handler;
>>>>>
>>>>> #Setup some essentials
>>>>> use strict;         #strict tolerance for code
>>>>> use Carp;           #debugging
>>>>> use diagnostics;    #more debugging
>>>>> use warnings;       #more debugging
>>>>>
>>>>> #Handler-related stuff
>>>>> use Apache2::RequestRec ();
>>>>> use Apache2::RequestIO ();
>>>>> use Apache2::Const -compile => qw(OK);
>>>>>
>>>>> sub handler {
>>>>>     my $self        = shift;
>>>>>     
>>>>>     my $view        = Myserver::View->new();
>>>>>     $view->mainpage;
>>>>>
>>>>>     # Obligatory stuff for the handler
>>>>>     $self->content_type('text/html');
>>>>>     return Apache2::Const::OK;
>>>>>
>>>>> }
>>>>>
>>>>> 1;
>>>>>
>>>>> ----------------------------------------------------
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> /home/Perl/Myserver/View.pm:
>>>>> ----------------------------------------------------
>>>>> package Myserver::View;
>>>>>
>>>>> #Setup some essentials
>>>>> use strict;         #strict tolerance for code
>>>>> use Carp;           #debugging
>>>>> use diagnostics;    #more debugging
>>>>> use warnings;       #more debugging
>>>>>
>>>>> #Loadup some needed functions
>>>>> use HTML::Template;
>>>>>
>>>>> sub new {
>>>>>     my $self        = shift;
>>>>>     return $self;
>>>>> }
>>>>>
>>>>> sub mainpage {
>>>>>     my $self        = shift;
>>>>>     my $template    = HTML::Template->new(
>>>>> 		filename => '/home/Perl/tmpl/mainpage.tmpl',
>>>>>                 cache => 1,
>>>>>                 debug => 1,
>>>>>                 stack_debug => 1 );
>>>>>     print "Content-Type: text/html\n\n";
>>>>>     print $template->output;
>>>>>     return $self;
>>>>> }
>>>>>
>>>>> 1;
>>>>> ----------------------------------------------------
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> /home/Perl/tmpl/mainpage.tmpl:
>>>>> ----------------------------------------------------
>>>>> <html><body bgcolor="#FF00FF">Test!</body></html>
>>>>> ----------------------------------------------------
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> /home/Perl/tests/View_mainpage.pl
>>>>> ----------------------------------------------------
>>>>> #!/usr/bin/perl -w
>>>>>
>>>>> # Test printing of the main page
>>>>> print "Main Page..";
>>>>>
>>>>> #Let's load the view module
>>>>> use lib "../";
>>>>> use Myserver::View;
>>>>> #Now let's load some things that are very handy
>>>>> use strict;         #strict tolerance for code
>>>>> use Carp;           #debugging
>>>>> use warnings;       #more debugging
>>>>> use diagnostics;    #even more debugging
>>>>>
>>>>> # Let's create an object
>>>>> my $view        = Myserver::View->new;
>>>>>
>>>>> # Now, let's tell View to display the main page
>>>>> $view->mainpage;
>>>>>
>>>>> print ".OK";
>>>>>
>>>>> 1;
>>>>> ----------------------------------------------------
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Thu, 2008-03-13 at 13:29 +0800, Foo JH wrote:
>>>>>> try print $template->output;
>>>>>>
>>>>>> You forgot the print();
>>>>>>
>>>>>> xyon wrote:
>>>>>>> Hey everyone,
>>>>>>>
>>>>>>> Firstly, I apologize I sent the previous email under an incorrect
subject line.
>>>>>>>
>>>>>>> I am working on my first Object-Oriented project, and have hit
a slight
>>>>>>> snag. I am using HTML::Template to output within the View module,
but it
>>>>>>> never outputs. I don't see any errors in the logs, I just get
a blank
>>>>>>> page. Below is pertinent information including a test script
with its
>>>>>>> output:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> OS Info:
>>>>>>> ----------------------------------------------------
>>>>>>> CentOS release 4.6 (Final)
>>>>>>> ----------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Package info:
>>>>>>> ----------------------------------------------------
>>>>>>> perl-5.8.8-11
>>>>>>> perl-HTML-Template-2.9-1
>>>>>>> httpd-2.0.59-1.el4s1.10.el4.centos
>>>>>>> mod_perl-2.0.3-1.el4s1.3
>>>>>>> ----------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> /home/perl/Myserver/View.pm
>>>>>>> ----------------------------------------------------
>>>>>>> package Myserver::View;
>>>>>>>
>>>>>>> #Setup some essentials
>>>>>>> use strict;         #strict tolerance for code
>>>>>>> use Carp;           #debugging
>>>>>>> use diagnostics;    #more debugging
>>>>>>> use warnings;       #more debugging
>>>>>>>
>>>>>>> #Loadup some needed functions
>>>>>>> use HTML::Template;
>>>>>>>
>>>>>>> sub new {
>>>>>>>     my $self        = shift;
>>>>>>>     return $self;
>>>>>>> }
>>>>>>>
>>>>>>> sub mainpage {
>>>>>>>     my $self        = shift;
>>>>>>>     my $template    = HTML::Template->new( filename =>
>>>>>>> '/home/Perl/tmpl/mainpage.tmpl',
>>>>>>>             cache => 1,
>>>>>>>             debug => 1, 
>>>>>>>             stack_debug => 1 );
>>>>>>>     print "Content-Type: text/html\n\n";
>>>>>>>     $template->output;
>>>>>>>     return $self;
>>>>>>> }
>>>>>>>
>>>>>>> 1;
>>>>>>> ----------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> /home/Perl/tests/View_mainpage.pl
>>>>>>> ----------------------------------------------------
>>>>>>> #!/usr/bin/perl -w
>>>>>>>
>>>>>>> # Test printing of the main page
>>>>>>> print "Main Page..";
>>>>>>>
>>>>>>> #Let's load the view module
>>>>>>> use lib "../";
>>>>>>> use Myserver::View;
>>>>>>> #Now let's load some things that are very handy
>>>>>>> use strict;         #strict tolerance for code
>>>>>>> use Carp;           #debugging
>>>>>>> use warnings;       #more debugging
>>>>>>> use diagnostics;    #even more debugging
>>>>>>>
>>>>>>> # Let's create an object
>>>>>>> my $view        = Myserver::View->new;
>>>>>>>
>>>>>>> # Now, let's tell View to display the main page
>>>>>>> $view->mainpage;
>>>>>>>
>>>>>>> print ".OK";
>>>>>>>
>>>>>>> 1;
>>>>>>> ----------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> /home/Perl/tmpl/mainpage.tmpl:
>>>>>>> ----------------------------------------------------
>>>>>>> <html><body bgcolor="#FF00FF">Test!</body></html>
>>>>>>> ----------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Output with debugging on (as above):
>>>>>>> ----------------------------------------------------
>>>>>>> $ tests/View_mainpage.pl 
>>>>>>> ### HTML::Template Debug ### In _parse:
>>>>>>> ### HTML::Template _param Stack Dump ###
>>>>>>>
>>>>>>> $VAR1 = [
>>>>>>>           \'<html><body bgcolor="#FF00FF">Test!</body></html>
>>>>>>> '
>>>>>>>         ];
>>>>>>>
>>>>>>> Main Page..Content-Type: text/html
>>>>>>>
>>>>>>> ### HTML::Template Debug ### In output
>>>>>>> ### HTML::Template output Stack Dump ###
>>>>>>>
>>>>>>> $VAR1 = [
>>>>>>>           \'<html><body bgcolor="#FF00FF">Test!</body></html>
>>>>>>> '
>>>>>>>         ];
>>>>>>>
>>>>>>> .OK
>>>>>>> ----------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Output without debugging:
>>>>>>> ----------------------------------------------------
>>>>>>> $ tests/View_mainpage.pl 
>>>>>>> Main Page..Content-Type: text/html
>>>>>>>
>>>>>>> .OK
>>>>>>> ----------------------------------------------------
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>   
>>>
> 
> 

Mime
View raw message