Schrift
[thread]5506[/thread]

Modul nicht vorhanden (Seite 2)



<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
Dubu
 2005-10-07 01:17
#47389 #47389
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Den "Internal Server Error" kann ich schon verstehen, denn der Testcode oben ist schliesslich kein CGI-Skript, vor allem liefert er keinen Content-Type-Header. Es muss also einen 500er geben, wenn man das unveraendert als CGI ausfuehrt.
Tom
 2005-10-07 01:47
#47390 #47390
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Dubu,06.10.2005, 23:17]Den "Internal Server Error" kann ich schon verstehen, denn der Testcode oben ist schliesslich kein CGI-Skript, vor allem liefert er keinen Content-Type-Header. Es muss also einen 500er geben, wenn man das unveraendert als CGI ausfuehrt.[/quote]
;)

@kristian

Kann im moment nicht testen ob es damit bei Hosteurope klappt, aber sobald ichs testen kann melde ich mich.

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
Tom
 2005-10-08 02:46
#47391 #47391
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=kristian,05.10.2005, 20:41]Der Code den ich gepostet habe ist der Workarround für die "kaputten Hoster", die mir bislang untergekommen sind.[/quote]
Wie muss ich deinen Code verwenden?
Habe hier mal ein Testscript das aber nicht funktioniert.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl -w

use CGI::Carp "fatalsToBrowser";
use CGI qw(:all);
use warnings;
use lib './module';

use File::Spec;
use FindBin;
BEGIN{
unless((defined $FindBin::Bin)&&(length($FindBin::Bin) > 3)&&(-d $FindBin::Bin)){
use File::Basename;
my($script,$bin) = fileparse($0);
unshift(@INC, File::Spec->catdir($bin,'mylibs'));
}else{
unshift(@INC, File::Spec->catdir($FindBin::Bin,'mylibs'));
}
}

print "Content-Type: text/html\n\n";

print "Das Programmverzeichnis ist: $FindBin::Bin";




Quote
> Gibt es da nicht die Möglichkeit das Modul in ein Verzeichniss zu packen und es von dort aufzurufen?

Hehe, woher weiss dein Script denn, wo dieser Ordner ist, solange es nicht weiss wo es selbst ist?


Es weiss doch dass es in einem Verzeichniss ist, und wenn ich dann "use lib './module';" schreibe weiss es doch dass es im aktuellen Verzeichniss unter dem Verzeichniss Module die Module findet oder nicht!?

Tom
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
Strat
 2005-10-08 11:53
#47392 #47392
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
ja, das script weiss, dass es in einem verzeichnis ist. wenn du jedoch ein Verzeichnis ./module angibst, dann geht das jedoch nicht unbedingt vom verzeichnis weg, in dem das script liegt, sondern vom aktuellen verzeichnis aus (als beispiel: wie oft rufst du perl aus /usr/bin/ auf, und wie oft befindest du dich da in anderen verzeichnissen?)
Das Problem ist, dass gerade bei cgi-scripten nicht gesichert ist, dass der server zuerst ein cwd in dieses verzeichnis vornimmt, und deshalb gibt es auch FindBin.

Andere Moeglichkeiten:
1. $0 untersuchen, ob da ein pfad drinnensteht (z.B. mit File::Basename muesste es einfach gehen) und dann use lib "$dir/module" oder so laden.
2. Das Modulverzeichnis hardcoden, z.B. use lib qw(/home/bla/myModules); ist allerdings unflexibel
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
renee
 2005-10-08 12:36
#47393 #47393
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@Tom: was funktioniert an dem Code nicht?? Welche Fehlermeldung gibt es??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
kristian
 2005-10-08 13:48
#47394 #47394
User since
2005-04-14
684 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo
Ist mein Perl denn so unverständlich?
Erstmal: Ein Perlscript sucht Module in den Verzeichnissen, die in "@INC" gelistet sind.
Wenn ich jetzt eigene Module nutzen will muss das Verzeichnis in dem meine Module liegen in @INC stehen.
Die Frage ist also, wie bekomme ich "mein" Verzeichnis in @INC hinein.
Der normale Weg wäre:
Code: (dl )
1
2
3
4
5
use FindBin;
use File::Spec;
my $work_dir = $FindBin::Bin;
my $lib_dir = File::Spec->catdir($work_dir,'module'); # bei mir immer 'mylibs' statt 'module'
unshift(@INC,$libdir);

use lib "$lib_dir"; klappt leider nicht, da alle "use-Anweisungen" vorrangig behandelt werden, daher push oder unshift jenachdem ob meine Module vor den ev. auf dem Server installierten gefunden und genutzt werden sollen.

Wenn jetzt bei einem Hoster FindBin kaputt ist und der Hoster das auch nicht reparieren will oder kann muss man tricksen.
Mein Workarround macht nicht anderes, als zu testen, ob FindBin funktioniert und ob es das Verzeichnis $FindBin::Bin auch wirklich gibt.
Für den Fall dass es das Verzeichnis nicht gibt, wird $0 (kompletter Pfad des Scriptes) zerlegt und das Verzeichnis als Arbeitsverzeichnis gesehen. Was anderes macht FindBin übrigens auch nicht, nur halt etwas sicherer und platform-übergreifender als ich hier.
Dem Arbeitsverzeichnis hänge ich dann das Modulverzeichnis an (File::Spec) und schiebe das ganze nach @INC;

In der Hoffnung dass das jetzt verständlich war
Kristian\n\n

<!--EDIT|kristian|1128765028-->
renee
 2005-10-08 13:59
#47395 #47395
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du solltest das use lib ("pfad"); auch vor dem use FindBin machen... use lib () ist die bessere Variante des unshift. Und wenn Du das vor dem use <module> machst, dann wird auch zuerst in Deinem Verzeichnis gesucht...\n\n

<!--EDIT|renee|1128765741-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
kristian
 2005-10-08 14:14
#47396 #47396
User since
2005-04-14
684 Artikel
BenutzerIn
[Homepage] [default_avatar]
@renee
Knurrrrrr....
perldoc lib =>
The parameters to "use lib" are added to the start of the
perl search path. Saying

use lib LIST;

is almost the same as saying

BEGIN { unshift(@INC, LIST) }

Was sollte denn statt "pfad" mit use lib in @INC geschoben werden?
Wenn ich den Pfad hardcoden will kann ich mir den Quatsch mit FindBin auch gleich sparen.

Gruss Kristian\n\n

<!--EDIT|kristian|1128766713-->
renee
 2005-10-08 17:13
#47397 #47397
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
ok, bei FindBind ist es eine Ausnahme...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Tom
 2005-10-10 01:16
#47398 #47398
User since
2003-09-20
470 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=renee,08.10.2005, 10:36]@Tom: was funktioniert an dem Code nicht?? Welche Fehlermeldung gibt es??[/quote]
Es wird nur "Das Programmverzeichnis ist:" ausgegeben, normalerwiese sollte danach ja der Pfad stehen, aber da steht nichts.

Hier kannst du Dir es anschauen -> Klick

Auf meinem Server kalppts wunderbar -> Klick

Quote
Ist mein Perl denn so unverständlich?


Ich bin kein Perl-Profi und da verstehe ich manchmal den für mich komplizierten Code nicht.

Habe mylibs durch module ersetzt, klappt aber trotzdem nicht.

@all

Falls Ihr mal die Daten des Servers sehen wollt, ich habe sysinfo hochgeladen, anschaun könnt Ihr euch das hier -> Klick

Tom\n\n

<!--EDIT|Tom|1128892812-->
Computerprobleme??? -> http://www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2005-10-03 21:04.