Re: Re-installing 1.99_08 binary or 1.99_05 RPM in Red Hat 8 [mp2]

2003-02-05 Thread Jon
(Just an informational post to round off the thread.)

The following worked for me, I now have a working mod_perl 1.99!

At 15:08 15/01/2003 +0100, Jérôme Augé wrote:


To compile mod_perl-1.99_xx on RedHat 8.0 I used :

$ perl Makefile.PL MP_APXS=/usr/sbin/apxs

First, I removed the original mod_perl-1.99_05 RPMS then I compiled and
installed the newer one.


Many thanks Jérôme, also Stas, and Paul for the advice on ditching the 
RPM's :o)




Newbie advice required

2003-02-05 Thread Seldo
Hello everyone -

I'm in the unfortunate position of being needing to write an Apache
2.0 module using mod_perl 2.0, while being simultaneously new to both
mod_perl, the Apache API, and perl itself. I guess I'm a glutton for
punishment, or something. (Did I mention this is all on Win32?)

What I want my module to be able to do is to substitute content from
various plug-in applications as the response to various URLs. For
example, if the user requests
www.mydomain.com/app1/file
I want app1.exe (or whatever) to retrieve a file / run a database
query / do some processing and return some output. Importantly, I
*then* want the rest of Apache to treat this file as if it had come
from the file system, e.g. it it's a .php file I still want PHP to
handle it, if there are any other handlers assigned I still want them
to handle it. In short, this substitution has to be completely
transparent. (This should be possible by returning Apache::DECLINED,
but it doesn't seem to work like that, see below)

Now, I know it's possible to configure Apache with app1.exe as a
handler for /app1, etc.. What I'm creating is a single module that
handles *all* URLs (i.e. handles /), and manages the mapping itself.

So far, I think the best way to do this is to create a URI translation
handler module which will simply use $r-uri() to call the application
with whatever data and parameters it needs. First question:

1. Is this really the best way to supply the server with content that
comes from elsewhere than simply the file system?

I've written a simple translator which can return .html files, but if
I set the uri to a .php file the server seems to go into a loop (I've
been unable to diagnose what's actually happening).

2. Why would setting $r-uri() to a .php file be any different to the
rest of the server than setting it to a .html file?

and finally

3. How to ensure that the server treats the output of an application
the same as it does a file, i.e. applying all the necessary handlers
etc?

Any and all advice appreciated, including You fool! This already
exists! :-)

Seldo.

  Seldo Voss: www.seldo.com
  ICQ #1172379 or [EMAIL PROTECTED]

To know the road ahead, ask those coming back.




article: The Apache of the Future

2003-02-05 Thread Stas Bekman
Here is an article on Apache 2.0 adoption trend
http://www.newsfactor.com/perl/story/20572.html

__
Stas BekmanJAm_pH -- Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide --- http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com




Re: Newbie advice required

2003-02-05 Thread Stas Bekman
Seldo wrote:

Hello everyone -

I'm in the unfortunate position of being needing to write an Apache
2.0 module using mod_perl 2.0, while being simultaneously new to both
mod_perl, the Apache API, and perl itself. I guess I'm a glutton for
punishment, or something. (Did I mention this is all on Win32?)


You forgot to add to unfortunate facts that both mod_perl 2.0 and Apache 2.0 
are new and may have bugs ;) But on the other hand you are the fortunate one 
to be one of the first to embrace the new platform. What doesn't kill you 
makes you stronger ;)

What I want my module to be able to do is to substitute content from
various plug-in applications as the response to various URLs. For
example, if the user requests
www.mydomain.com/app1/file
I want app1.exe (or whatever) to retrieve a file / run a database
query / do some processing and return some output.


Do you say that the actual code resides in the database? So you want to fool 
Apache as if the code existed on the filesystem? Or does your database returns 
paths to the real files?

Importantly, I
*then* want the rest of Apache to treat this file as if it had come
from the file system, e.g. it it's a .php file I still want PHP to
handle it, if there are any other handlers assigned I still want them
to handle it. In short, this substitution has to be completely
transparent. (This should be possible by returning Apache::DECLINED,
but it doesn't seem to work like that, see below)

Now, I know it's possible to configure Apache with app1.exe as a
handler for /app1, etc.. What I'm creating is a single module that
handles *all* URLs (i.e. handles /), and manages the mapping itself.

So far, I think the best way to do this is to create a URI translation
handler module which will simply use $r-uri() to call the application
with whatever data and parameters it needs. 

You mean PerlTransHandler, right? You are on the right track then.


First question:

1. Is this really the best way to supply the server with content that
comes from elsewhere than simply the file system?

I've written a simple translator which can return .html files, but if
I set the uri to a .php file the server seems to go into a loop (I've
been unable to diagnose what's actually happening).

2. Why would setting $r-uri() to a .php file be any different to the
rest of the server than setting it to a .html file?

and finally


If you don't have a real file with the content you probably need to rely on 
output filters.

3. How to ensure that the server treats the output of an application
the same as it does a file, i.e. applying all the necessary handlers
etc?


Assuming that you have a set of filters which do the work, it's easy. e.g. I 
think php in 2.0 is an output filter, so you should just dynamically insert 
the php filter when you figure out that the content is php. HTML/text is easy. 
SSI is a filter, so covered too. What other processors do you need?

Any and all advice appreciated, including You fool! This already
exists! :-)




__
Stas BekmanJAm_pH -- Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide --- http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com




Re[2]: Newbie advice required

2003-02-05 Thread Seldo
Whoa, quick turnaround! Oof course, it's 11pm here, but only 6pm where
you are I suppose...

On 05 February 2003, Stas Bekman wrote:
SB You forgot to add to unfortunate facts that both mod_perl 2.0 and
SB Apache 2.0 are new and may have bugs ;)

From what I could tell, doing this with Apache 1.3 is even more
daunting, since it didn't really have the concept of filters ironed
out.

 I want app1.exe (or whatever) to retrieve a file / run a database
 query / do some processing and return some output.

SB Do you say that the actual code resides in the database? So you
SB want to fool Apache as if the code existed on the filesystem? Or
SB does your database returns paths to the real files?

Well... to be honest, whichever is easier. I'm not that far along :-)

Ideally, it would be the former. Literally, I want all the files the
users to come from one or another of a set of applications. The
applications will return data in response to a URL: that data might
be flat HTML, it might be PHP, or for some URLs it might be binary
data. I don't want it to matter: I want the server to handle the
content *as if it had just come from the filesystem*.

SB You mean PerlTransHandler, right? You are on the right track then.

Yes, I mean PerlTransHandler. Yay! Not completely bonkers then...

 2. Why would setting $r-uri() to a .php file be any different to
 the rest of the server than setting it to a .html file?

SB If you don't have a real file with the content you probably need
SB to rely on output filters.

 3. How to ensure that the server treats the output of an
 application the same as it does a file, i.e. applying all the
 necessary handlers etc?

SB Assuming that you have a set of filters which do the work, it's
SB easy. e.g. I think php in 2.0 is an output filter, so you should
SB just dynamically insert the php filter when you figure out that
SB the content is php. HTML/text is easy. SSI is a filter, so covered
SB too. What other processors do you need?

That's the thing. This application has to be flexible: I don't want to
have to explicitly support file types; I simply want to supply the
server with data that looks like a file and have it treat that data
exactly as it would any other file.

However, I have a feeling this might be impractical, so alternate
suggestions are welcome :-) At this point I feel I should be doing
some kind of I-am-a-clueless-newbie dance. I am totally out of my
depth, and this project is due in 3 weeks! *bursts into semi-panicked
laughter*. Um. Yeah :-)

Thanks again!

Seldo.

  Seldo Voss: www.seldo.com
  ICQ #1172379 or [EMAIL PROTECTED]

If idiots could fly, IRC servers would be airports.




Re: Newbie advice required

2003-02-05 Thread Stas Bekman
Seldo wrote:

Whoa, quick turnaround! Oof course, it's 11pm here, but only 6pm where
you are I suppose...


It's actually 11am, on your tomorrow (PDT+11) ;) I'm living in the future ;)


On 05 February 2003, Stas Bekman wrote:
SB You forgot to add to unfortunate facts that both mod_perl 2.0 and
SB Apache 2.0 are new and may have bugs ;)


From what I could tell, doing this with Apache 1.3 is even more

daunting, since it didn't really have the concept of filters ironed
out.


True.

[...]

SB Assuming that you have a set of filters which do the work, it's
SB easy. e.g. I think php in 2.0 is an output filter, so you should
SB just dynamically insert the php filter when you figure out that
SB the content is php. HTML/text is easy. SSI is a filter, so covered
SB too. What other processors do you need?

That's the thing. This application has to be flexible: I don't want to
have to explicitly support file types; I simply want to supply the
server with data that looks like a file and have it treat that data
exactly as it would any other file.


The simplest way would be to save the extracted data into a file, and set 
$r-filename to point to that file, and let the Apache core handle that. If 
you want it to be smarter, but more complex, read on.

However, I have a feeling this might be impractical, so alternate
suggestions are welcome :-) At this point I feel I should be doing
some kind of I-am-a-clueless-newbie dance. I am totally out of my
depth, and this project is due in 3 weeks! *bursts into semi-panicked
laughter*. Um. Yeah :-)


Well, we are all new to this thing so *you* are the one who has to be the 
inventor.

In short, if all possible applications can be invoked as filters you should be 
all set.

text/html: just send it out
text/plain: ditto

mod_perl: compile the handler (assuming that the code is coming from the db) 
and configure the handler to be modperl/perl-script or set the 
PerlResponseHandler to the one you've just compiled

exe: save the data in a file, and set $r-filename to it. Apache will do the rest.

php: though I haven't tried it, the php filter probably accepts its code as an 
input to a filter. you have to check that though.




__
Stas BekmanJAm_pH -- Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide --- http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com



Re[3]: Newbie advice required [some further info]

2003-02-05 Thread Seldo
I mentioned that I don't think there's a way to practically supply
arbitrary data to Apache that looks like its coming from the
filesystem. The other way I thought of is this:

$r-uri() can map one URI to another. This means that a request to
www.mydomain.com/app1/site/page.php
could be remapped by my module to call app1.exe /site/page.php (i.e.
using the remainder of the path as a parameter to determine what data
to supply. This works, but it means extension-based handlers like PHP
probably won't be activated -- how can I get around that, short of
manually coding support for every requested file type?

Also, the following code used as a PerlTransHandler sends the server
into what looks like an endless loop:


package Seldo::MaskURI;
use strict;
use warnings;
use Apache::RequestRec ();
use Apache::Const -compile = qw(DECLINED);
  
  sub handler {
  my $r = shift;
  $r-uri(/bob.php);

  return Apache::DECLINED;
  }
1;


The code is supposed to perform the (nonsensical) task of returning
bob.php no matter what URL the server is given. If .php is changed
to .html it works, but as I say, having it as .php throws it for
six. Anybody know why? It's possible there's something really obvious
wrong -- like I said, I barely know perl, far less mod_perl.

Seldo.

  Seldo Voss: www.seldo.com
  ICQ #1172379 or [EMAIL PROTECTED]

My friend drowned in a bowl of muesli. He was pulled in by a strong currant.




Re: Newbie advice required [some further info]

2003-02-05 Thread Stas Bekman
Seldo wrote:

I mentioned that I don't think there's a way to practically supply
arbitrary data to Apache that looks like its coming from the
filesystem. The other way I thought of is this:

$r-uri() can map one URI to another. This means that a request to
www.mydomain.com/app1/site/page.php
could be remapped by my module to call app1.exe /site/page.php (i.e.
using the remainder of the path as a parameter to determine what data
to supply. This works, but it means extension-based handlers like PHP
probably won't be activated -- how can I get around that, short of
manually coding support for every requested file type?


Have you configured your server to run .php files by php?


Also, the following code used as a PerlTransHandler sends the server
into what looks like an endless loop:


package Seldo::MaskURI;
use strict;
use warnings;
use Apache::RequestRec ();
use Apache::Const -compile = qw(DECLINED);
  
  sub handler {
  my $r = shift;
  $r-uri(/bob.php);

  return Apache::DECLINED;
  }
1;


The code is supposed to perform the (nonsensical) task of returning
bob.php no matter what URL the server is given. If .php is changed
to .html it works, but as I say, having it as .php throws it for
six. Anybody know why? It's possible there's something really obvious
wrong -- like I said, I barely know perl, far less mod_perl.

Does it work for other handlers? e.g.:

$r-uri(/perl/bob.pl);

assuming that you have /perl configured to run ModPerl::Registry?

Does a request to /bob.php works fine if requested directly (when you don't 
have your PerlTransHandler installed?

__
Stas BekmanJAm_pH -- Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide --- http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com



Re[2]: Newbie advice required [some further info]

2003-02-05 Thread Seldo
On 06 February 2003, Stas Bekman wrote:
SB Have you configured your server to run .php files by php?

From httpd.conf: AddType application/x-httpd-php .php
(which is a yes as far as I'm concerned, but taking no chances...)

SB Does a request to /bob.php works fine if requested directly (when
SB you don't have your PerlTransHandler installed?

Yep, it works fine.

SB Does it work for other handlers? e.g.:
$r-uri(/perl/bob.pl);
SB assuming that you have /perl configured to run ModPerl::Registry?

Hmm, that was illuminating -- that works fine too! And PHP is indeed a
filter in 2.0, as you say (unlike perl). So the problem is either
PHP-specific, or a problem with filters... gah. I'm going to bed now,
but at least I have a new line of attack to try in the morning.

Seldo.

  Seldo Voss: www.seldo.com
  ICQ #1172379 or [EMAIL PROTECTED]

Bart's Blackboard: I will not strut around like I own the place.




RPC::XML questions

2003-02-05 Thread Todd W
I've been using XSLT, DOM, and SAX for about a year now to do device 
independent web sites. I want to start doing some web services.

I have Programming Web Services with Perl and it all makes sense so 
far, but I have a few questions.

I figured I'd start with RPC as thats where the book starts.

Ive tested and used Apache::XMLRPC::Lite and it works great.

I wanted to try Apache::RPC::Server because of the built in 
documentation system and status gui.

I have two questions:

question id=1
I put the following right before the part about: #Section 2 main server:

Perl

use Apache::RPC::Server ();

$main::ecgRpc = Apache::RPC::Server-new(
 path = '/rpc',
 auto_methods = 1,
 auto_updates = 1
);

$Location{'/rpc'} =
{
 SetHandler   = 'perl-script',
 PerlHandler  = '$main::ecgRpc',
};

$Location{'/rpc-status'} =
{
 SetHandler   = 'perl-script',
 PerlHandler  = 'Apache::RPC::Status',
};

/Perl

The server IS running:
[trwww@devel_rh trwww]$ perl
require RPC::XML;
require RPC::XML::Client;

$cli = RPC::XML::Client-new('http://localhost/rpc');
$resp = $cli-send_request('system.listMethods');

print( ((ref $resp) ? join(', ', @{$resp-value}) : Error: $resp), \n);
Ctrl-D
system.identity, system.introspection, system.listMethods, 
system.methodHelp, system.methodSignature, system.multicall, system.status

but when I point my browser at http://localhost/rpc-status, it says that 
there are 0 servers running?
/question

question id=2
I also have SOAP::Lite installed, which provided a simple program called 
RPCXMLsh.pl. I thought I would be able to use it to query my 
Apache::RPC::Server server because RPC is RPC no matter how it is 
implemented, but I got:

[trwww@devel_rh rpc]$ perl /usr/bin/XMLRPCsh.pl http://localhost/rpc
Usage: method[(parameters)]
 system.listMethods
--- SYNTAX ERROR ---
Unexpected Content-Type '' returned


 Ctrl-D

I took a look at Apache/RPC/Server.pm and I think I understand why this 
dosent work. The code for the handler checks that an incoming http 
header called content-type is set to 'text/xml'

But I couldnt find methods in XMLRPC::Lite or SOAP::Lite to add/modify 
httpd headers?
/question

Thank you,

Todd W.





Environment variable in Apache/mod_perl/IO::Socket

2003-02-05 Thread dhfg
Hi,

In my web application, I am using Apache server with mod_perl.  In one of my
Perl modules, I am creating a client socket using IO::Socket::INET which is
accepting the hotsname and port values from the environment variables set in
the Apache config file http.conf.  For some reason, this didn't work
eventhough I have verified that the values were set and retrieved correctly.
Below is the extract of my codes:

In the config file http.conf:

PerlSetEnv AGENT_SOCKET_HOST  'gaia'
PerlSetEnv AGENT_SOCKET_PORT  

In my AgentSocket.pm:

use strict;
use IO::Socket::INET;
sub new
{
$host = $ENV{AGENT_SOCKET_HOST};   # I have checked these values are 
same
as
$port = $ENV{AGENT_SOCKET_PORT};   # those set in the http.conf

$socket = new IO::Socket::INET(
PeerAddr = $host,
PeerPort = $port,
Proto= 'tcp')
or die Cannot connect to $port at $host;
:
return $socket;

}

The above socket did not get connect to the server but didn't die either.
But if I assigned
 $host='gaia', $port='' within the AgentSocket.pm then it worked fine.

I have been tearing my hair out for days now and can't find the answer.
Perhaps you could help.  Thanks in advance.

Regards,
Dean