Schrift
[thread]9957[/thread]

Erneutes Laden eines Moduls erzwingen

Leser: 1


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
bloonix
 2007-08-05 12:50
#97285 #97285
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
ptk+2007-08-05 00:33:46--
Mit "apachectl graceful" werden keine Perl-Module nachgeladen, die schon im Apache-Root-Prozess existieren. Also jedes Modul, das per "PerlModule" oder use oder require in httpd.conf spezifiziert und damit geladen wurde.

Der TE schrieb, das die Module in einem Perlskript eingebunden werden.
Wenn dieses Perlskript nun ein Child des Apache ist, dann erhält das Skript
doch auch bestimmt ein Signal zum Beenden? Ich kenne das so bei
FastCGI und wollte auch darauf hinaus, dass ein "apachectl graceful" dafür
sorgt, dass Besucher kaum was vom Restart mitbekommen, wenn die
Childs auf die Signale richtig reagieren.
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
brela
 2007-08-03 20:49
#97445 #97445
User since
2007-08-03
3 Artikel
BenutzerIn
[default_avatar]
Hallo,
von einem Perlscript rufe ich selbstgeschriebene Module auf. Auch andere Scripte greifen auf diese Module zu, bei denen u.a. Apache genutzt wird. Das alles läuft auf einem Linux-Server.

Hauptscript:
use Abc:Def;

Modul:
package Abc::Def;

Problem:
Ändere ich den Inhalt des Moduls, so werden die Änderungen nicht aktiv, wenn ich das Hauptscript erneut ausführe. Erst nach einem Reload des Apaches greifen die Änderungen.

Ich möchte/kann den Apache aber nicht andauernd bei der Modul-Entwicklung reloaden.
Sicherlich ist irgendwas nicht ordentlich konfiguriert, aber da ich ich mich mit dem Betriebssystem kaum auskenne, kann ich das nicht ändern.

Deswegen die Frage:
Wie kann ich in meinem Hauptscript erzwingen, dass mein Modul wirklich neu geladen wird?

Gruss
brela
Gast Gast
 2007-08-03 21:50
#97447 #97447
Mod Perl ?
In der Server config
PerlModule Apache2::Reload
PerlInitHandler Apache2::Reload

mfg Dirk
brela
 2007-08-03 22:28
#97451 #97451
User since
2007-08-03
3 Artikel
BenutzerIn
[default_avatar]
Einen Reload des Apache möchte ich verhindern, weil andere Scripte/Benutzer damit arbeiten und es dann zu Ausfällen kommt.

Gibt es keine Möglichkeit das Script zu zwingen ein bestimmtes Modul neu zu laden?
ptk
 2007-08-03 22:46
#97456 #97456
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Das Modul Apache2::Reload (oder Apache::Reload für modperl1) macht genau das, was du möchtest: Module in einem modperl-Prozess nachladen, falls sie sich geändert haben. Das funktioniert allerdings zu 95%. Es gibt Fälle, wo das Nachladen nicht richtig funktioniert, z.B. beim Erweitern von EXPORT-Listen.
PerlProfi
 2007-08-03 22:47
#97457 #97457
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Hast dus schon mit require und import probiert?
Also:
Code: (dl )
1
2
3
# anstatt use Abc::Def;
require Abc::Def;
Abc::Def->import();

kA ob das einen Unterschied macht, aber du kannstes ja mal probieren.

MfG
linse
 2007-08-03 22:50
#97458 #97458
User since
2006-02-02
61 Artikel
BenutzerIn
[Homepage]
user image
Du könntest das Module auch noch per
Code: (dl )
do ("./Abc/Def.pm/");

einbinden.
ptk
 2007-08-04 01:30
#97474 #97474
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
PerlProfi+2007-08-03 20:47:23--
Hast dus schon mit require und import probiert?
Also:
Code: (dl )
1
2
3
# anstatt use Abc::Def;
require Abc::Def;
Abc::Def->import();

kA ob das einen Unterschied macht, aber du kannstes ja mal probieren.

MfG

Das geht nicht. "require" wird nur einmal ausgeführt, es sei denn, man löscht vorher $INC{"Abc/Def.pm"}.
bloonix
 2007-08-04 12:47
#97488 #97488
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
ähm wie wäre es mit "apachectl graceful" ?

und wenn dein Skript dann das entsprechende Signal erhält,
aber gerade Content ausliefert, dann lässt du es halt bis zu
Ende ausliefern und dann beendet es sich.

Das sollte doch funktionieren und genau das tun was du
möchtest?
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
ptk
 2007-08-05 02:33
#97527 #97527
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
opi+2007-08-04 10:47:55--
ähm wie wäre es mit "apachectl graceful" ?

und wenn dein Skript dann das entsprechende Signal erhält,
aber gerade Content ausliefert, dann lässt du es halt bis zu
Ende ausliefern und dann beendet es sich.

Das sollte doch funktionieren und genau das tun was du
möchtest?

Mit "apachectl graceful" werden keine Perl-Module nachgeladen, die schon im Apache-Root-Prozess existieren. Also jedes Modul, das per "PerlModule" oder use oder require in httpd.conf spezifiziert und damit geladen wurde.
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2007-08-03 20:49.