CGI + Perl

Sziasztok!

Tudom ez egy nagyon láma kérdés, de sehogy se bírok rűjönni mi a baj. A helyzet az hogy volna egy cgi-s perl-es webalkalmazás (nevezett sql-ledger) és ezt szeretném beüzemelni szerény kis apache2-es serveremen. Már fent van minden ami a perlhez kell, meg a cgi-hez is fent van elvileg a fastcgi modul, de ennek ellenére semmi nem történik csak letöltést ajánl fel nekem amikor rá kellene lépnie egy .pl kiterjesztésű filera. Bent van a confban hogy "AddHandler cgi-script .pl", de semmi nem történik. Mit lehet ezzel kezdeni?

Hozzászólások

Kell egy
Options ExecCGI
is a könyvtárra:


<Directory /usr/lib/cgi-bin/>
...
    Options ExecCGI
...
</Directory>

az sem árt, ha a webszerver usere tudja futtatni a scriptet.
Ja persze triviális, de gondolom újraindítottad az Apache-ot, miután módosítottad a konfigot. (Ne haragudj, nem akarlak hülyének nézni, de időnként az ember évtizedes gyakorlattal is beszophat egy "nincsbedugva a cucc" problémát)

Valószínűleg az "AddHandler cgi-script .pl" hiányzik az apache configból, vagy nincs engedélyezve a cgi modul.

Ami elől menekülnek, az után szaladnak.

Egyébként olyannyira érdekes a dolog, hogy ha megnézem a szerver üzenetet alul, amikor kilistáztatok egy könyyvtárat akkor még fel is sorolja a telepített modulok között a perl-t is. Szóval elvileg be is van töltve csak éppen még valamiért nem tudja társítani hozzá a .pl kiterjesztést.

Próbáld meg ezt.

< Files *.pl >
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
< /Files >

Valami kis probléma még mindig akad. Eddig azt hittem, hogy más valami miatt kapok minden script futtatásakor "500 Internal Server Error" üzenetet. De rá kellett jönnöm, hogy valami a perl-ben okozza.
Szóval lehet, hogy valami konfiguráció még kell a perl-nek, vagy az apache-nak?

Milyen disztro alatt próbálod?
(nem olvastam végig a topicod)
Debian alatt ott van *.deb.ben, szinte semmit sem kell csinálni hogy működjön!
Ez igaz gentoo alatt is, igaz ott nincs a portage fában, de ennek ellenére nem sok gondom volt vele!
Olvasd el a sql-ledger doksiját!
Lehet valamit kihagyhattál! :)

----------------------------------------------------------------
"Értem én hogy villanymotor, de mi hajtja!?

Ubuntut használok, tehát lényegében debian. :)
Igen, olvasgatom a doksikat és elvileg én mindent megcsináltam.

Az apche error.log-ban ez áll:

[error] Can't locate bin/mozilla/login.pl in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl . /etc/apache2) at /usr/share/sql-ledger/login.pl line 120.\n

Perl programozásban nem vagyok jártas, de ahogy én értelmeztem az említett sort:

require "bin/$form{terminal}/$script";

szerintem itt van valami hiba és a require generálja a hibát. De nem találtam a config fileokban sem semmi ilyen változót ahol ezt állítani tudnám. Szóval nem értem. az sql-ledger-nek a doksija semmiben nem tér ki ilyen jellegű dolgokra. Amúgy néha a 92. sorra hivatkozik és az is egy require ami egy másik ugyanilyen scriptet akar betölteni. A vicc csak az, hogy ezek a scriptek léteznek és olvashatóak is. Akkor vajon miért nem találja meg?

Minden perl függőség fent van?

Kifelejtettem, hogy anno uhu-1.0 alatt kezdtem sql-ledger-t és ot is ment!
Pedig apache-t(1.3.x) pgsql-t és néhány perl(perlDBI, DBD-Pg) csomagot is forrásból tettem fel.

Apache httpd.conf-ba "include"-oltad a sql-ledger_httpd.conf fájlt?
Gentoo alatt csak ez kellett megcsinálnom és persze az adatbázist létrehozni!

----------------------------------------------------------------
"Értem én hogy villanymotor, de mi hajtja!?

A perl felrakásakor nem hiányolt semmit. Illetve mindent telepített.
A perl dbi csomagok közül feltettem mindent ami kicsit is kapcsolódhat a postgresqlhez meg általában magához a perlhez. A libdbd-pg-perl, libdbd-anydata-perl, libdbd-cvs-perl szintén fent vannak.

Az sql-ledger_httpd.conf file tartalma benne van a default hostnak a configjában.
Az adatbázist még nem készítettem el, de arra csak nem ez az üzenet dukálna. Remélem nem derül ki, hogy valami 64bites támogatás hiányzik hozzá, hogy menjen, uganis 64bites rendszer fut.

Hibaüzi:

Can't locate bin/mozilla/login.pl in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl . /etc/apache2) at /usr/share/sql-ledger/login.pl line 92.\n

File: /usr/share/sql-ledger/bin/mozilla/login.pl létezik.

httpd.conf erre vonatkozó része: (hátha segít)

Alias /sql-ledger/ /usr/share/sql-ledger/

AddHandler cgi-script .pl
Options ExecCGI Includes FollowSymlinks

Order Deny,Allow
Deny from All

Háhh kiszedtem a httpd.confból ezt:

(Files *.pl)
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
(/Files)

Most elindult. Már csak az adatbázis létrehozásának kell utána néznem. Nagyon Köszönöm mindenkinek a segítséget!

Még egy utolsó kérdés. :D Szerencsére a postgresql-lel is először foglalkozom.

Szóval az miért lehet, hogy:
psql -U template1

parancs kiadása után tudok kapcsolódni a megadott felhasználó névvel. De ha az sql ledger admin felületén adom meg ugyanazt a felhasználó nvet vagy pg Admin III -ban akkor is azt írja hogy nem tud kapcsolódni a serverhez. Pedig én megadom, hogy localhost meg, hogy 5432-es port.

Sziasztok,

Hasonló problémám van: PHP-t szeretnék futtatni CGI-ként apache2-n. Modulként megy, de nekem CGI kellene. Nem jövök rá mit kell beállítani neki.

--
CCC3

Tehát a feladat: Hogyan lehet Linux/Apache-on a PHP-t CGI-ként működtetni? 1 nap olvasgatás és próbálgatás után megvan. Tanulságképpen leírom, mi kell, mindössze ennyi:

A mods-available directoryból el kell vinni a php5.load és php5.conf filéket (ezzel a mod-php le van tiltva).

Az apache2.conf-ba beírni két sort.

AddHandler php-script .php
Action php-script /cgi-bin/php

Kész.

Az Action hatására az Apache átirányít: A php filékre elindítja a php interpretert, de előzőleg lekészít néhány REDIRECT_* env változót, amiből az interpreter kitalálhatja, hogy mi a bemenet, a query string, stb. Ehhez az kell, hogy a php force-cgi-redirect opcióval legyen fordítva (úgy van).

A hagyományos CGI-s megoldások szándékosan le vannak tiltva. Pl. az átirányított URL közvetlen böngészőbe írása, a php interpreterenek megadott parancssori argumentumok nem működnek.

Nyilvánvalóan rossz volna a php filébe beírni #!/usr/lib/cgi-bin/php (és +x flaget adni rá), mert a php filék nem változhatnak aszerint, hogy winen vagy unixon, CGI-vel vagy mod-php-val vannak-e feldolgozva.

--
CCC3