mod_perl/Apache/WinXPSP2

mod_perl/Apache/WinXPSP2

am 07.04.2006 19:51:18 von Udo Marx

Guten Tag in dclpm!

Falls ich hier falsch bin, bitte fuppen.

Habbich jezz eine neue Maschine und mir die Arbeit gemacht,
alles neu aufzusetzen - Fein!

WinXPSP2, Apache/2.0.55 (Win32) mod_perl/2.0.2 Perl/v5.8.8
, MySQL 5. 0, PHP 5.1.2 und PHPMyAdmin laufen alle.

Habe zum Testen ein env.pl, daß nur die Umgebungsvariablen zeigt und
ein 'test.conf' laden wil

Auszug aus dem script:
---snip---
use strict;
use CGI::Carp qw(fatalsToBrowser);

my $ConfFile = 'test.conf';

require("$ConfFile");
open(READ,"$ConfFile") or die "Could not open $ConfFile: $!\n";
close(READ);
---snip---

Laeuft fehlerfrei in /cgi-bin
Kopiere ich das selbe Script nach /perl,
kommt die Fehlermeldung:
Can't locate test.conf in @INC
(@INC contains: D:/Apache/perl/ C:/Programme/Perl/lib
C:/Programme/Perl/site/lib . D:/Apache2)
at D:/Apache2/perl/env.pl line 8


Docu http://perl.apache.org/docs/2.0/os/win32/index.html gelesen.

Laut Docu Anweisungen in httpd.conf eingefügt:

---snip---
### my mods

SetHandler server-status
Order Deny,Allow
Allow from localhost


# For Perl
ScriptInterpreterSource Registry
Alias /perldoc "C:/Programme/Perl/html"

# For mod_perl
LoadFile C:/Programme/Perl/bin/perl58.dll
LoadModule perl_module modules/mod_perl.so
PerlRequire "D:/Apache2/conf/extra.pl"

Alias /perl/ "D:/Apache2/perl/"


SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
Order allow,deny
Allow from all


### < /my mods>
---snap---

extra.pl:
use ModPerl::Util ();
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use Apache2::RequestUtil ();
use Apache2::ServerRec ();
use Apache2::ServerUtil ();
use Apache2::Connection ();
use Apache2::Log ();
use Apache2::Const -compile => ':common';
use APR::Const -compile => ':common';
use APR::Table ();
use Apache2::compat ();
use ModPerl::Registry ();
use CGI ();
use lib ('D:/Apache/perl/');
1;

Was mache ich flasch?
Bitte setzt mich auf das richtige Gleis, TIA

Re: mod_perl/Apache/WinXPSP2

am 08.04.2006 18:34:35 von Thomas Wittek

> Laeuft fehlerfrei in /cgi-bin
> Kopiere ich das selbe Script nach /perl,
> kommt die Fehlermeldung:
> Can't locate test.conf in @INC
> (@INC contains: D:/Apache/perl/ C:/Programme/Perl/lib
> C:/Programme/Perl/site/lib . D:/Apache2)
> at D:/Apache2/perl/env.pl line 8
> ...
> Was mache ich flasch?
> Bitte setzt mich auf das richtige Gleis, TIA

Liegt test.conf denn tatsaechlich in einem Ordner aus @INC (@INC
contains: D:/Apache/perl/ C:/Programme/Perl/lib
C:/Programme/Perl/site/lib . D:/Apache2)?

-Thomas

Re: mod_perl/Apache/WinXPSP2

am 09.04.2006 03:04:00 von Udo Marx

On Sat, 08 Apr 2006 18:34:35 +0200, Thomas Wittek
wrote:

>> Laeuft fehlerfrei in /cgi-bin
>> Kopiere ich das selbe Script nach /perl,
>> kommt die Fehlermeldung:
>> Can't locate test.conf in @INC
>> (@INC contains: D:/Apache/perl/ C:/Programme/Perl/lib
>> C:/Programme/Perl/site/lib . D:/Apache2)
>> at D:/Apache2/perl/env.pl line 8
>> ...
>> Was mache ich flasch?
>> Bitte setzt mich auf das richtige Gleis, TIA
>
>Liegt test.conf denn tatsaechlich in einem Ordner aus @INC (@INC
>contains: D:/Apache/perl/ C:/Programme/Perl/lib
>C:/Programme/Perl/site/lib . D:/Apache2)?
>
>-Thomas

Ja, ganz sicher im selben Verzeichnis: "."
Und"." ist in @INC enthalten.
--
Freundliche Gruesse,
Netzteil - Udo Marx
http://www.netzteil.com/session

Re: mod_perl/Apache/WinXPSP2

am 09.04.2006 08:29:46 von Bernd Giegerich

Moin,

>>Liegt test.conf denn tatsaechlich in einem Ordner aus @INC (@INC
>>contains: D:/Apache/perl/ C:/Programme/Perl/lib
>>C:/Programme/Perl/site/lib . D:/Apache2)?

> Ja, ganz sicher im selben Verzeichnis: "."
> Und"." ist in @INC enthalten.

Der Apache wechselt meines Wissens nicht explizit in das Verzeichnis, in
dem ein Script liegt, bevor er es aufruft.

Damit kann Dein Script auf die Nase fallen, solange Du Dich auf "." in
@INC verlässt.

Davon abgesehen verstehe ich nicht so ganz, warum Du Dein $ConfFile erst
per require einbindest, und dann anscheinend noch einmal händisch öffnest?

Wenn Du "in echt" mit require arbeitest, könntest Du vorher @INC z.B.
per unshift() um den Pfad zu Deiner Konfiguration erweitern. Liest Du's
händisch ein, kannst (und solltest) Du den vollen Pfad benutzen.

In beiden Fällen kannst Du Den Pfad zu Deinem Script zur Laufzeit z.B.
durch FindBin (ist, wenn ich mich nicht täusche, ein Core Modul) ermitteln.

Gruss,
Bernd

Re: mod_perl/Apache/WinXPSP2

am 09.04.2006 09:57:24 von Thomas Wittek

>> Ja, ganz sicher im selben Verzeichnis: "."
>> Und"." ist in @INC enthalten.
> ...
> In beiden Fällen kannst Du Den Pfad zu Deinem Script zur Laufzeit z.B=

> durch FindBin (ist, wenn ich mich nicht täusche, ein Core Modul) ermi=
tteln.


Kannst außerdem im Script prüfen, was denn gerade "." ist:

use Cwd;
warn getcwd();

-Thomas

Re: mod_perl/Apache/WinXPSP2

am 09.04.2006 10:42:53 von Udo Marx

On Sun, 09 Apr 2006 08:29:46 +0200, Bernd Giegerich

wrote:

>Moin,
>
>>>Liegt test.conf denn tatsaechlich in einem Ordner aus @INC (@INC
>>>contains: D:/Apache/perl/ C:/Programme/Perl/lib
>>>C:/Programme/Perl/site/lib . D:/Apache2)?
>
>> Ja, ganz sicher im selben Verzeichnis: "."
>> Und"." ist in @INC enthalten.
>
>Der Apache wechselt meines Wissens nicht explizit in das Verzeichnis, in
>dem ein Script liegt, bevor er es aufruft.
>
>Davon abgesehen verstehe ich nicht so ganz, warum Du Dein $ConfFile erst
>per require einbindest, und dann anscheinend noch einmal händisch öffnest?
>
>Wenn Du "in echt" mit require arbeitest, könntest Du vorher @INC z.B.
>per unshift() um den Pfad zu Deiner Konfiguration erweitern. Liest Du's
>händisch ein, kannst (und solltest) Du den vollen Pfad benutzen.

Stimmt, es lag an dem überflüssigen open(), mit unshift und require
geht's!

>In beiden Fällen kannst Du Den Pfad zu Deinem Script zur Laufzeit z.B.
>durch FindBin (ist, wenn ich mich nicht täusche, ein Core Modul) ermitteln.
Ne, ne, siehe perldoc FindBin. Soll man nicht unter mod_perl.

Vielen Dank fuer Eure Hilfe!
--
Freundliche Gruesse,
Netzteil - Udo Marx
http://www.netzteil.com/session

Re: mod_perl/Apache/WinXPSP2

am 09.04.2006 12:41:18 von Tony Muler

Bernd Giegerich wrote:

> Der Apache wechselt meines Wissens nicht explizit in das Verzeichnis, in
> dem ein Script liegt, bevor er es aufruft.
>
> Damit kann Dein Script auf die Nase fallen, solange Du Dich auf "." in
> @INC verlässt.

Stimmt. Da bin ich letztens auch auf die Nase gefallen.
War in dem Fall allerdings nicht innerhalb von mod_perl
oder CGI, sondern nur so. Die Anwendung musste von
dem Installationsverzeichnis unabhaengig sein. Meine
Loesung gefaellt mir selber nicht, aber zumindest
geht es.

use File::Basename;
use lib dirname($0);

Hat jemand was besseres?

T.

Re: mod_perl/Apache/WinXPSP2

am 09.04.2006 18:26:42 von Slaven Rezic

Udo Marx writes:

> On Sun, 09 Apr 2006 08:29:46 +0200, Bernd Giegerich
>
> wrote:
>
[...]
> >In beiden Fällen kannst Du Den Pfad zu Deinem Script zur Laufzeit z.B.
> >durch FindBin (ist, wenn ich mich nicht täusche, ein Core Modul) ermitteln.
> Ne, ne, siehe perldoc FindBin. Soll man nicht unter mod_perl.

Mit FindBin->again ist es ja unproblematisch. Siehe auch perldoc
FindBin.

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de

Lost in your Tk widget tree? Try
http://user.cs.tu-berlin.de/~eserte/src/perl/Tk-WidgetDump/

Re: mod_perl/Apache/WinXPSP2

am 10.04.2006 21:28:10 von Slaven Rezic

Tony Muler writes:

> Bernd Giegerich wrote:
>
> > Der Apache wechselt meines Wissens nicht explizit in das
> > Verzeichnis, in dem ein Script liegt, bevor er es aufruft.
> > Damit kann Dein Script auf die Nase fallen, solange Du Dich auf "."
> > in @INC verlässt.
>
> Stimmt. Da bin ich letztens auch auf die Nase gefallen.
> War in dem Fall allerdings nicht innerhalb von mod_perl
> oder CGI, sondern nur so. Die Anwendung musste von
> dem Installationsverzeichnis unabhaengig sein. Meine
> Loesung gefaellt mir selber nicht, aber zumindest
> geht es.
>
> use File::Basename;
> use lib dirname($0);
>
> Hat jemand was besseres?

use FindBin;
.... = $FindBin::RealBin;

Wurde hier schon erwähnt, glaube ich.

--
Slaven Rezic - slaven rezic de
Tired of using file selectors? Real programmers use the TAB key for
completion and not for jumping around. Try
http://search.cpan.org/search?mode=module&query=Tk::PathEntr y