User since
2005-07-10
24
Artikel
BenutzerIn
Hallo, habe es in meinem mod_perl handler "auf Teufel komm raus" nicht hinbekommen dass ich fuer die mysql-Anbindung DBI verwenden konnte (resultierte immer in einem Segmentation Fault mit Signal 11 im apache2 error log, das Script schickte schon bei EInbau eines simplen DB Connect nicht mal mehr einen Header raus - standalone als stinknormales Perl-Script hingegen macht DBI keine Probleme).
Nun habe ich ersatzweise Net::MySQL (aktuelle Version ist m.E. 0.08) verwendet, damit funktionierts.
Jetzt wuerde mich interessieren ob Net::MySQL ungefaehr gleich schnell wie DBI ist, oder sogar noch schneller? Vielleicht hat da ja jemand schon Erfahrungswerte machen koennen.
Was uebrigens auch nicht will ist das Compilieren der Apache Constants.
Verwendet wird ein Apache2 und mod_perl 1.9999...\n\n
<!--EDIT|Airport1|1121010975-->
User since
2003-08-04
14371
Artikel
ModeratorIn
Es gibt ein neueres
mod_perl (2.01). Vielleicht solltest Du das mal probieren. Dort sind einige Probleme behoben!
User since
2005-07-10
24
Artikel
BenutzerIn
Mit welcher Version meldet sich dieses dann in der Server Signatur?
Derzeit habe ich (noch) exakt dies hier - diese 1.999.21 irritiert mich etwas - fuer was steht die denn genau? dachte naemlich ich haette mod_perl2 installiert ;) :
Server: Apache/2.0.52 (Debian GNU/Linux) PHP/4.3.10-13 mod_ssl/2.0.52 OpenSSL/0.9.7e mod_perl/1.999.21 Perl/v5.8.4
User since
2003-08-04
5246
Artikel
ModeratorIn
1.99 sind die beta-versionen von mod_perl2
mod_perl 1 ist erst bei so etwa 1.29 angekommen...
User since
2005-07-10
24
Artikel
BenutzerIn
Vielen Dank fuer die ausgezeichnete Hilfe! Durch die Community hier wurde mir schon sehr viel weitergeholfen!!
Noch ne Frage ;) Ist es richtig dass nur Apache::DBI persistente Verbindungen bietet, und ich aehnliches mit Net::MySQL nicht erreichen kann? Ich dachte naemlich das ginge auch damit und habe die Connection z.B. immer so aufgebaut:
my $mysql ||= Net::MySQL->new( # CONDITIONAL opening, so never close
hostname => 'localhost',
database => 'usrdb_ranking-hits',
user => 'geheim',
password => 'geheim'
);
Habe dank der Community nun das neueste Apache-DBI-0.98 installieren koennen. mod_perl 2.0.1 will noch nicht, zuerst bekam ich Meldungen wie
Cannot install mod_perl/2.0.1 on top of mod_perl/1.999_021
due to a major API change between mod_perl 1.999_21 and 1.999_22.
Dann habe ich das alte 1.999.021 mittels
apt-get remove libapache2-mod-perl2
removed (ja, ist "nur" eine Beta von mod_perl2 und nicht 2.0.1)
Dann unter cpan abermals versucht 2.0.1 zu installieren, woraufhin apxs meint ich haette einen Apache 1.3, und ansonsten u.a. eine ap_release.h gesucht wird, die ich nicht habe. Naja, unter Umstaenden bleibe ich dann wohl bei 1.999.021 - scheint ja doch sonst eine komplexe Angelegenheit zu sein ;)\n\n
<!--EDIT|Airport1|1121081878-->
User since
2003-08-04
5246
Artikel
ModeratorIn
bei mod_perl kannst du die DBI-Connection auch schon in einem startup-script herstellen (vorausgesetzt, es wird immer mit demselben user/passwort connected); dann connect_on_init (oder so aehnlich) verwenden; siehe perldoc Apache::DBI\n\n
<!--EDIT|Strat|1121091067-->
User since
2005-07-10
24
Artikel
BenutzerIn
Das mit connect_on_init hab ich in meiner startup.pl versucht, daraufhin meint er dass er Apache.pm nicht laden kann. Seltsamerweise meckert er aber nicht ueber das use Apache::DBI in der startup Datei und auch nicht ueber das PerlModule Apache::DBI in der apache2.conf.
Im Handler selber habe ich VOR dem sub handler { ein
my $dbh;
IM Handler selber dann:
$dbh ||= DBI->connect("DBI:mysql:usrdb_ranking-hits....
Desweiteren wird prepare, execute, finish und sogar disconnect verwendet (letzteres soll unter Apache::DBI nichts bewirken.. also eine NoOp)
Sollte ich noch was beachten ;) ?
Das folgende gibt bei mir ein Bild auf den Request aus, jedoch seltsamerweise immer als mit Header "Transfer-Encoding: chunked", woran liegt das?
open(IMAGE,"</home/gfx/design$style/$pr.gif");
$r->print(<IMAGE>);
close(IMAGE);
return OK;\n\n
<!--EDIT|Airport1|1121098279-->
User since
2005-07-10
24
Artikel
BenutzerIn
Fuer die Nachwelt: um das "chunked" abzustellen habe ich es nun so geloest:
my $fname = '/pfad/datei.gif';
my $flen = (-s $fname);
open(IMAGE, '<'.$fname);
$r->headers_out->set('Content-Length', $flen);
$r->print(<IMAGE>);
close(IMAGE);
return OK;
Bleibt nur die Frage ob ein $content_length = (stat (FILEHANDLE))[7]; schneller waere ;)
User since
2005-07-10
24
Artikel
BenutzerIn
Das kann ich heute sogar mit JA beantworten, im Test war "stat" 12% schneller :)
User since
2003-08-04
7321
Artikel
ModeratorIn
gibt es einen Grund, warum du kein Transfer-Encoding: chunked willst ?