Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I'm trying to connect to an Oracle DB with CGI and Perl. DBI was already installed on the server, and (since I don't have root access) I've now installed Oracle::DBD in my own directory, which I use in the Perl. I have a very simple Perl script, which just tries to connect to the DB and then disconnect. The script works when I run it at the command-line with perl.

I copied db.pl to dbpl.cgi, and this also works at the command line. They both produce the following:

sales% dbpl.cgi Content-type: text/html <p/> going to try to connect... done sales%

When I try to run dbpl.cgi in the browser, though, it stalls on the DB connection. (I don't even get the die error message.) As you can see by clicking there, it just produces this:

going to try to connect...

Now, the use DBD::Oracle; line is comment out. Commented-out or not, both db.pl and dbpl.cgi work at the command-line. But if I uncomment it, I get an Internal Server Error. (I don't have access to the web server log.)

Any ideas? I'm able, in a number of scripts, to connect to and access the DB through Perl, but every one of them halts in the browser when it tries to connect to the DB.

Any help would be greatly appreciated.

Matt

Replies are listed 'Best First'.
Re: Perl/CGI/Oracle hangs when connecting
by iguanodon (Priest) on Feb 20, 2004 at 23:39 UTC
    You don't need to use DBD::Oracle, the call to connect takes care of that.

    As to why your CGI can't connect, does the user that the web server runs at have permission to access /oracle ?

      I'm not sure...the script is trying to login with the built-in account, or with my own account (i.e., what I'd give SQL*Plus). What other permissions does it need? Matt
        I mean the Unix file system permissions on /oracle might not allow the web server user to read necessary files. When you run it from the command line it probably works because you can read those files but the web server is most likely running as another user who might not have read access.
Re: Perl/CGI/Oracle hangs when connecting
by saintmike (Vicar) on Feb 20, 2004 at 23:48 UTC
    It'd be interesting what this Internal Server Error is about. Since you don't have access to the logs, use

    use CGI::Carp qw(fatalsToBrowser);

    in your script and error messages will show in the browser.

      That gave output. It can't load Oracle.so (which where it says it's looking), libclntsh.so.9.0 (which is somewhere), or DynaLoader.pm (which is NOT where it's looking). What does this mean? Matt
        Check if the shell environment variable LD_LIBRARY_PATH is set the same in both environments (cmd line vs. CGI). If not, try adding

        BEGIN { $ENV{LD_LIBRARY_PATH} .= ":dir/where/your/.so/is"; }

        to your CGI script. Oh, and check if the web server user (nobody usually) has access to the *.so file.