Font
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3164[/thread]

httpd.conf bei apche2 unter suse 9.3 ganz anders



<< |< 1 2 3 >| >> 26 entries, 3 pages
Froschpopo
 2005-11-03 10:48
#31217 #31217
User since
2003-08-15
2653 articles
BenutzerIn
[default_avatar]
hmm, also die ganzen Beispiele zur Einbindung von mod_perl in den Apache sind mir nicht so wirklich Hilfreich gewesen. Ich verwende SuSE 9.3 und habe den Apache2 bisher mit Yast konfiguriert. Yast hat sich für diese Anwendung in meinen Augen wirklich positiv entwickelt. Aber wie binde ich denn nu mod_perl ein?
renee
 2005-11-03 14:41
#31218 #31218
User since
2003-08-04
14371 articles
ModeratorIn
[Homepage] [default_avatar]
Froschpopo
 2005-11-08 17:32
#31219 #31219
User since
2003-08-15
2653 articles
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
30.8.5.2. mod_perl vs. CGI
Im einfachsten Fall kann man ein bisheriges CGI-Skript als mod_perl-Skript laufen lassen, indem man es unter einer anderen URL aufruft. Die Konfigurationsdatei enthält Aliase, die auf das gleiche Verzeichnis verweisen und darin enthaltene Skripten entweder über CGI oder über mod_perl aufrufen. Alle diese Einträge sind in der Konfigurationsdatei bereits eingetragen. Der Alias-Eintrag für CGI lautet:

ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"
   
Die Einträge für mod_perl lauten wie folgt:

<IfModule mod_perl.c>
# Provide two aliases to the same cgi-bin directory,
# to see the effects of the 2 different mod_perl modes.
# for Apache::Registry Mode
ScriptAlias /perl/          "/srv/www/cgi-bin/"
# for Apache::Perlrun Mode
ScriptAlias /cgi-perl/      "/srv/www/cgi-bin/"
</IfModule>
   
Die folgenden Einträge sind für mod_perl ebenfalls nötig. Auch sie sind bereits in der Konfigurationsdatei eingetragen.

#
# If mod_perl is activated, load configuration information
#
<IfModule mod_perl.c>
Perlrequire /usr/include/apache/modules/perl/startup.perl
PerlModule Apache::Registry

#
# set Apache::Registry Mode for /perl Alias
#
<Location /perl>
SetHandler  perl-script
PerlHandler Apache::Registry
Options ExecCGI
PerlSendHeader On
</Location>

#
# set Apache::PerlRun Mode for /cgi-perl Alias
#
<Location /cgi-perl>
SetHandler  perl-script
PerlHandler Apache::PerlRun
Options ExecCGI
PerlSendHeader On
</Location>

</IfModule>
   
Diese Einträge legen Aliase für die Modi Apache::Registry und Apache::PerlRun an. Der Unterschied zwischen beiden Modi ist folgender:

Apache::Registry
Alle Skripten werden kompiliert und dann in einem Cache gehalten. Jedes Skript wird als Inhalt einer Subroutine angelegt. Dies ist gut für die Performance, hat jedoch auch einen Nachteil: Die Skripten müssen sehr sauber programmiert sein, da Variablen und Subroutinen zwischen den Aufrufen erhalten bleiben. Das bedeutet, dass man Variablen selbst zurücksetzen muss, damit sie beim nächsten Aufruf erneut verwendet werden können. Speichert man beispielsweise in einem Skript für Online-Banking die Kreditkartennummer eines Kunden in einer Variablen, so könnte diese Nummer wieder auftauchen, wenn der nächste Kunde die Anwendung benutzt und somit das gleiche Skript wieder aufruft.

Apache::PerlRun
Die Skripten werden für jede Anfrage neu kompiliert, sodass Variablen und Subroutinen zwischen den Aufrufen aus dem Namespace verschwinden. Der Namespace ist die Gesamtheit aller Variablennamen und Routinennamen, die zu einem bestimmten Zeitpunkt während der Existenz eines Skripts definiert sind. Mit Apache::PerlRun muss man deswegen nicht so genau auf saubere Programmierung achten, da alle Variablen beim Start des Skripts neu initialisiert sind und keine Werte aus vorangegangenen Aufrufen mehr enthalten können. Dies geht zu Lasten der Geschwindigkeit, ist aber immer noch deutlich schneller als CGI (trotz einiger Ähnlichkeiten zwischen Apache::PerlRun und CGI), da man sich den Aufruf eines eigenen Prozesses für den Interpreter spart.


wie istn das jetzt mit globalen variablen die z.b. mit our deklariert werden? wie muss man die wieder ungültig machen?\n\n

<!--EDIT|Froschpopo|1131464955-->
pq
 2005-11-08 21:38
#31220 #31220
User since
2003-08-04
12208 articles
Admin1
[Homepage]
user image
[quote=Froschpopo,08.11.2005, 16:32]wie istn das jetzt mit globalen variablen die z.b. mit our deklariert werden? wie muss man die wieder ungültig machen?[/quote]
wenn sie für jeden request anders sein sollen, dann ja. am besten keine
solchen globalen variablen verwenden.
mod-perl macht im fall von Apache::Registry nichts anderes (im prinzip),
als um dein komplettes skript ein
Code: (dl )
1
2
3
sub handler {
# original skript-code
}

herumzuschreiben. diese handler-routine wird dann bei jedem
request aufgerufen.
also sollte ein solches skript möglichst keine eigenen subroutinen
definieren, sondern auf module zurückgreifen. verschachtelte subroutinen
bringen nur ärger.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Froschpopo
 2005-11-08 23:14
#31221 #31221
User since
2003-08-15
2653 articles
BenutzerIn
[default_avatar]
achso, dieses handle-routine ist dann wahrscheinlich auch dieser httpd2-prefork-prozess, wenn ich das richtig verstehe?

Aber wenn ich mit "our" eine variable in meinem script, außerhalb einer sub deklariere weil ich den wert in jeder sub verwenden möchte, dann müsste die doch im ModPerl-Handler in der von dir benannten "handler()" local definiert sein...
also dann sowas wie: $handler::variable

oder?

Ich hab nämlich variablen, die brauche ich im gesamten script.\n\n

<!--EDIT|Froschpopo|1131484573-->
pq
 2005-11-08 23:39
#31222 #31222
User since
2003-08-04
12208 articles
Admin1
[Homepage]
user image
subroutine ist nicht gleich prozess

subroutine ist nicht gleich package.
mach erst mal aus deinem script ein script, das alle subroutinen in ein modul
auslagert, dann sehen wir weiter.\n\n

<!--EDIT|pq|1131486055-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Froschpopo
 2005-11-08 23:47
#31223 #31223
User since
2003-08-15
2653 articles
BenutzerIn
[default_avatar]
wieso soll ich denn jetzt plötzlich alles in ein Modul verlagern?
pq
 2005-11-09 00:07
#31224 #31224
User since
2003-08-04
12208 articles
Admin1
[Homepage]
user image
[quote=pq,08.11.2005, 20:38]also sollte ein solches skript möglichst keine eigenen subroutinen
definieren, sondern auf module zurückgreifen. verschachtelte subroutinen
bringen nur ärger.[/quote]
deshalb
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Froschpopo
 2005-11-09 00:11
#31225 #31225
User since
2003-08-15
2653 articles
BenutzerIn
[default_avatar]
warum bringen die ärger?
pq
 2005-11-09 09:12
#31226 #31226
User since
2003-08-04
12208 articles
Admin1
[Homepage]
user image
warum ist der papst katholisch?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
tina@lugosi:~$ perl -Mstrict -wle'
sub handler {
 my $x = 23;
 sub inner {
   print "inner before: $x";
     $x = $x + 42;
     print "inner: $x";
 }
}
inner();
'
Variable "$x" will not stay shared at -e line 5.
Use of uninitialized value in concatenation (.) or string at -e line 5.
inner before:
Use of uninitialized value in addition (+) at -e line 5.
inner: 42

und das ganze mit our:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
tina@lugosi:~$ perl -Mstrict -wle'
sub handler {
 our $x = 23;
 sub inner {
     print "inner before: $x";
     $x = $x + 42;
     print "inner: $x";
 }
}
inner();
'
Use of uninitialized value in concatenation (.) or string at -e line 5.
inner before:
Use of uninitialized value in addition (+) at -e line 5.
inner: 42
\n\n

<!--EDIT|pq|1131520851-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< |< 1 2 3 >| >> 26 entries, 3 pages



View all threads created 2005-11-03 10:48.