Desilets, Alain wrote:
Thx again for the help. I tried what you suggested (after reading gAzZaLi's
answer), but it still doesn't seem to help.
I think it does, but read on.
Here are the lines I have added to my httpd.conf file:
----------------
LoadFile "C:/Perl/bin/perl512.dll"
LoadModule perl_module modules/mod_perl.so
----------------
And a bit further...
------------------
Alias /perl/ "C:/wamp/www/perl/"
<Location /perl/>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
Order allow,deny
Allow from all
</Location>
------------------
I have a script C:/wamp/www/perl/printenv.pl, which prints the content of the
%ENV hash. When I run it, I still get CGI/1.1 for the GATEWAY_INTERFACE key.
See output at the end of this message.
Note that I do get
MOD_PERL: mod_perl/2.0.4
and you also get MOD_PERL_API_VERSION.
I believe that you actually get those only when the script is being run by
mod_perl.
See this :
http://perl.apache.org/docs/2.0/user/coding/coding.html#Environment_Variables
Of course, with a script like printenv.pl, you will not notice a big difference in
response times.
But try this :
At the beginning of your script, add these lines :
use Apache::RequestRec;
my $r=shift;
print "Hostname : ",$r->hostname,"\n";
if you don't get an error, and you see the line in the output, then for sure you /are/
running under mod_perl.
read here for more info :
http://perl.apache.org/docs/2.0/user/coding/coding.html#Getting_the_C__r__Object
Which seems to indicate that mod_perl is indeed installed. But it doesn't seem
to be actually invoked for running the script.
Any additional advice?
Thx.
Alain
=== Output of http://localhost/perl/printenv.pl ===
SCRIPT_NAME: /perl/printenv.pl
SERVER_NAME: localhost
SystemRoot: C:\Windows
SERVER_ADMIN: admin@localhost
HTTP_ACCEPT_ENCODING: gzip, deflate
HTTP_CONNECTION: keep-alive
REQUEST_METHOD: GET
HTTP_ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
SCRIPT_FILENAME: C:/wamp/www/perl/printenv.pl
COMSPEC: C:\Windows\system32\cmd.exe|
SERVER_SOFTWARE: Apache/2.2.21 (Win32) PHP/5.3.8 mod_perl/2.0.4
Perl/v5.12.3
HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.7
WINDIR: C:\Windows
QUERY_STRING:
REMOTE_PORT: 56619
PATHEXT: .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
HTTP_USER_AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0)
Gecko/20100101 Firefox/8.0
SERVER_PORT: 80
SERVER_SIGNATURE:
HTTP_ACCEPT_LANGUAGE: fr-ca,fr;q=0.8,en-us;q=0.5,en;q=0.3
REMOTE_ADDR: 127.0.0.1
SERVER_PROTOCOL: HTTP/1.1
PATH:
C:\Perl\site\bin;C:\Perl\bin;C:\Perl64\site\bin;C:\Perl64\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program
Files (x86)\Common Files\Roxio Shared\DLLShared\;C:\Program Files (x86)\Common
Files\Roxio Shared\10.0\DLLShared\;C:\cygwin\bin;C:\Program Files
(x86)\QuickTime\QTSystem\; C:\Users\Desiletsa\android-sdks\tools;
MOD_PERL_API_VERSION: 2
REQUEST_URI: /perl/printenv.pl
GATEWAY_INTERFACE: CGI/1.1
SERVER_ADDR: 127.0.0.1
DOCUMENT_ROOT: C:/wamp/www
HTTP_HOST: localhost
MOD_PERL: mod_perl/2.0.4
-----Original Message-----
From: André Warnier [mailto:a...@ice-sa.com]
Sent: Tuesday, November 29, 2011 3:25 PM
To: mod_perl list
Subject: Re: Installing mod_perl on Windows 7
Desilets, Alain wrote:
OK, so I uninstalled Apache 64 bits, and installed Apache 32 bits instead.
Now, Apache starts correctly with the following two lines in httpd.conf
----------------
LoadFile "C:/Perl/bin/perl512.dll"
LoadModule perl_module modules/mod_perl.so
----------------
Only problem is that my scripts still seem to run under the conventional CGI
interface, instead of mod_perl. For example, if I run this script:
----------------
#!C:/Perl/bin/perl
print "Content-type: text/plain\r\n\r\n";
print "Server's gateway interface:\t$ENV{GATEWAY_INTERFACE}\n\n";
print "Other values of the server environment:\n";
foreach my $a_key ( keys %ENV ) {
print "$a_key:\t$ENV{$a_key}\n";
}
------------------
I get "Server's gateway interface: CGI/1.1", and according to this page:
http://perl.apache.org/docs/1.0/guide/install.html#Testing_via_a_CGI_script
this means I am NOT running mod_perl. If I WAS running mod_perl, I should be
seeing something like 'CGI-Perl/1.1' instead.
Note that I saw the following line in httpd.conf
---------------
LoadModule cgi_module modules/mod_cgi.so
---------------
I tried commenting it out, thinking that maybe this was overriding mod_perl.
But when I do that, my scripts don't run as a perl script anymore. Instead, the
source code of the scripts is displayed in the browser when I try to invoke it.
I have looked through all the documentation I could find about installing mod_perl for windows, and I can't find any additional step beyond the ones I have taken so far.
Any suggestions you have will be greatly appreciated.
If your cgi scripts are only Perl and shell scripts, then you need to add something to
your <Location /cgi-bin> section. Look here :
http://perl.apache.org/docs/2.0/user/intro/start_fast.html#Registry_Scripts
Basically, it means that you need to tell Apache that for the files in that directory, the
Apache handler (the module which generates the responses to the requests) is mod_perl.
(mod_perl is smart enough that when it sees a shell script, it will call the shell to run
it, instead of itself).
Make sure that you read the caveats of running scripts under mod_perl
(persistence e.g.).
Thx.
Alain Désilets
-----Original Message-----
From: André Warnier [mailto:a...@ice-sa.com]
Sent: Tuesday, November 29, 2011 10:48 AM
To: mod_perl list
Subject: Re: Installing mod_perl on Windows 7
Desilets, Alain wrote:
Hi folks,
This is my first post on this list.
I am trying to install mod_perl on Windows 7, and am running into some problems.
Here's what I did.
First, I ran the following commands to get the mod_perl package and install it:
----------------
ppm rep add http://cpan.uwinnipeg.ca/PPMPackages/12xx
ppm install mod_perl
----------------
Then I added the following lines at the start of my httpd.conf file:
----------------
LoadFile "C:/Perl/bin/perl512.dll"
LoadModule perl_module modules/mod_perl.so
----------------
But since then, Apache won't restart, unless I comment out those two lines. To
diagnose the problem, I ran the command:
----------------
httpd.exe -t -c httpd.conf
----------------
And it gives me the following error message:
----------------
httpd: Syntax error on line 29 of
C:/wamp/bin/apache/Apache2.2.17/conf/httpd.conf: Cannot load
C:/Perl/bin/perl512.dll into server: %1 is not a valid Win32 application.
----------------
The file C:/Perl/bin/perl512.dll does exist.
I am wondering if the problem is not due to a difference between 32 and 64 bits
applications. I ran a small perl script which looks at the DOS headers of
executables, to find the architecture that the executable was compiled for, and
here's what it tells me:
httpd.exe: AMD64
perl512.dll: i386
mod_perl.so: i386
I would think that a 64 Apache is able to load a 32 bit DLL, no?
No.
Does anyone have some ideas or suggestions?
a 64-bit Windows can run 32 and 64 applications. But within an application, you cannot
mix and match.
So either get a 64-bit perl and mod_perl, or get a 32-bit Apache.
I would suggest a 32-bit Apache, as for a workstation, you are unlikely to need the extra
memory that 64-bit would allow you to use; and your 32-bit applications will use less
memory in vain.