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

In PostgreSQL einloggen.



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
pug
 2006-01-22 17:43
#33971 #33971
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Ich habe seit gestern noch ein anderes Problem. Ich wa gezwungen mein System neu zu installieren ( längere Geschichte ) und jetzt funktionieren meine CGI-Skripte nicht mehr.

In die /etc/postgresql/8.1/main/pg_hba.conf habe ich folgendes wieder eingetragen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
# Database administrative login by UNIX sockets
local all postgres ident sameuser

# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all
# "local" is for Unix domain socket connections only
local all all ident sameuser
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 md5


Und hier habe ich ein einfaches Beispiel-Skript, das einfach nur eine Tabelle abfragt:
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
#!/usr/bin/perl

use warnings;
use strict;
use CGI;
use DBI;

my $zeile;
my $obj = new CGI;

open ( FH ,"</var/www/db/db.txt" ) or die "Kann Datei nicht oeffnen!\n";
my $db_name = <FH>;
my $db_user = <FH>;
my $db_passwd = <FH>;


close (FH);
chomp for $db_name, $db_user, $db_passwd;

my $dbh = DBI->connect ( "DBI:Pg:dbname=$db_name", "$db_user", "$db_passwd" )
or die "Keine Verbindung mit der DB!\n";

my $result = $dbh->prepare ( "SELECT * from kunden" ) or die "Vorbereitung nicht durchfuehrbar!\n";

$result->execute() or die "Abfrage nicht ausfuehrbar!\n";


print $obj->header ( "text/html" ),
$obj->start_html ( -title => "alle User" );

print $obj->h3 ( "Auflistung aller User \n" );

while ( $zeile = $result->fetchrow_arrayref )
{
print $obj->h4 ( "$zeile->[0] , $zeile->[1] , $zeile->[2] , $zeile->[3], $zeile->[4], $zeile->[5] \n" );
}
print $obj->end_html;

$dbh->disconnect();

exit;

Ich bekomme aber immer nur diese Meldung:
Quote
[Sun Jan 22 16:26:41 2006] [error] [client 127.0.0.1] Premature end of script headers: /usr/lib/cgi-bin/alle_user.pl


Und davor auch schon mal diese Meldung:
Quote
[Sun Jan 22 16:18:56 2006] [error] [client 127.0.0.1] Premature end of script headers: /usr/lib/cgi-bin/alle_user.pl
DBI connect('dbname=test2','postgres',...) failed: FATAL: Ident-Authentifizierung für Benutzer »postgres« fehlgeschlagen
at /usr/lib/cgi-bin/alle_user.pl line 18

Der Abgabetermin rückt näher aber ich muss mich auf einmal wieder mit Grundlagen auseinandersetzen. Warum geht das denn jetzt nicht mehr?

Vielen Dank schonmal vorab.

Gruss Christian
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
steffenw
 2006-01-22 21:48
#33972 #33972
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Das deutet darauf hin, daß Dein Script im Fehlerfall stirbt und Du keine oder schlechte Fehlerbehandlung für das CGI machst. Schaue Dir mal das Modul CGI::Carp an, speziell die Stelle, wo fatals steht. Dann schaue im DBI-Modul nach, wo etwas zu errstr steht. Und dann schreibt'S Dir den Bildschirm voll, mit dem, was Du erwartest. Fehlerbehandlung ist das A und O. MAche das richtig und Deine Entwicklungszeit verkürzt sich. Und dann klappt es auch mit dem Abgabetermin.
$SIG{USER} = sub {love 'Perl' or die};
renee
 2006-01-22 23:56
#33973 #33973
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nur was allgemeines:

Code: (dl )
chomp for $db_name, $db_user, $db_passwd;


schreibt man besser als
Code: (dl )
chomp($db_name, $db_user, $db_passwd);


Code: (dl )
1
2
my $dbh = DBI->connect ( "DBI:Pg:dbname=$db_name", "$db_user", "$db_passwd" )
or die "Keine Verbindung mit der DB!\n";


hier brauchst Du bei $db_user und $db_passwd die " nicht...


Taucht der FATAL-Text immer noch auf?? Dann gibt es wohl die Datenbank bzw. den User nicht... Benutzt Du die gleiche Version von Postgres?
Gibt es noch andere Meldungen in der error.log?
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/
pug
 2006-01-23 17:06
#33974 #33974
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Mit CGI::Carp erfahre ich auch nicht mehr, als das was in der Apache-error drin steht. Mitlerweile habe ich erst mal die CGI-Programmierung aufgegeben und versuche das erst eimal mit einer einfachen DBI-Verbindung. Und es ist so daß nun Skripte nicht mehr gehen, die vorher funktioniert haben!!!
Code: (dl )
1
2
my $dbh = DBI->connect ("DBI:Pg:dbname=test2", "postgres", "sonderbar")
or die "Keine Verbindung mit der DB!\n";
hat vorher prima funktioniert aber jetzt nicht mehr. Ach ja ich habe die Version 7.3 von PostgreSQL vorher gehabt und nun ist es 8.1.
Aber es kann auch an der pg_hba.conf liegen, daß ich die vor zwei Wochen richtig konfiguriert habe, und jetzt nicht mehr.

Gruss Christian
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
steffenw
 2006-01-23 17:22
#33975 #33975
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wer guckt schon immer in's log, bei der Entwicklung ist das doch lästig.

Ob Du nun CGI machst oder nicht, Du bekommst keine Verbindung zur Datenbank, wenn ein connect-Fehler kommt. Hast Du überhaupt Rechte auf der Datenbank, gibt es die Datenbank überhaupt?\n\n

<!--EDIT|steffenw|1138029889-->
$SIG{USER} = sub {love 'Perl' or die};
pug
 2006-01-23 17:28
#33976 #33976
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Im Moment kann ich auf die Datenbank NUR über "psql test2 " zugreifen. Also es gibt sie. :-)
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
nepos
 2006-01-24 12:47
#33977 #33977
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Quote
FATAL: Ident-Authentifizierung für Benutzer »postgres« fehlgeschlagen

Das ist dein Problem. Du musst nach dem Neuinstallieren eventuell noch die pg_hba.conf von Postgres anpassen. Momentan versucht dein CGI sich als User postgres anzumelden, wobei die DB das per ident ueberprueft und dabei natuerlich beim User landet, unter dem der Apache laeuft.
Schau dir mal die Doku zur pg_hba.conf an und pass die Datei entsprechend an. Bei Debian ist die zumindest recht gut kommentiert, was es so an Optionen und Schaltern gibt.

EDIT: Unter http://www.postgresql.org/docs....BA-CONF findest du die Dokumentation, was und wie man in der pg_hba.conf so einstellen kann/muss.\n\n

<!--EDIT|nepos|1138099912-->
pug
 2006-01-24 13:40
#33978 #33978
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Ganz oben, in meiner ersten Nachricht in diesem Thread steht, wie ich diese editiert habe.
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
nepos
 2006-01-24 17:02
#33979 #33979
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Anscheinend aber nicht korrekt, denn sonst wuerde er keine Identabfrage nutzen ;)
pug
 2006-01-25 10:29
#33980 #33980
User since
2005-08-17
91 Artikel
BenutzerIn
[default_avatar]
Ja, aber es gibt noch andere Möglichkeiten. Z.B. die postgresql.conf. Und ich glaube da hat sich gewaltig was verändert. Seit der Version 8.1 oder 8.0 kommt PostgreSQL mit einem Cluster daher. Wenn ich z.B. den Parameter "tcpip_socket = true" in die postgresql.conf eintrage gibt er mir beim neustart einen Parserfehler zurück.

Gruss Christian
Ein Betriebssystem sie zu knechten, sie alle zu finden, Ins Dunkel zu treiben und ewig zu binden.

William Gates III
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2006-01-22 17:43.