Hello, I'm trying to set up ruby-fastcgi on redhat 9. Everything seems to
be set up right, but I get an error in my apache logs when I try to access a
simple fcgi ruby script:
[Tue Sep 30 01:15:54 2003] [alert] [client 127.0.0.1] (13)Permission denied:
FastCGI: failed to connect to (dynamic) server "/var/www/cgi-bin/test.fcgi":
something is seriously wrong, any chance the socket/named_pipe directory was
removed?, see the FastCgiIpcDir directive
this means that either
a) the program did not run at all
b) the program ran, but spat out bad things
your program is a valid fcgi program - it runs on my host - so it's not b.
so, you obviously have apache set up, and configured for, mod_fastcgi since
the error logs have those messages.
a few easy things to consider:
first, what is the output of
~ > which -a ruby
~ > sudo su nobody -c './test.fcgi < /dev/null'
eg - can you run your program as user nobody (or whatever the web server
runs as) from the command line? of course you could eliminate this
possibility by simply
~ > chmod 755 ./test.fcgi
~ > ./test.fcgi < /dev/null
if not
do you have multiple installations of ruby? (1.6.8 and 1.8.0)
if so, do you have ruby-fcgi installed for each site_ruby dir?
i guess all that stuff may seem obvious - but i had to throw it out there...
about the only thing i have run across with ruby cgi programs that use modules
crashing is that, when you compile a module, say ruby-fcgi, it may depend on
other libraries:
ruby-fcgi -> libfastcgi.so
you can see this by, for example:
~ > ldd /usr/local/ruby-1.8.0/lib/ruby/site_ruby/1.8/i686-linux/fcgi.so
libfcgi.so.0 => /usr/local/lib/libfcgi.so.0 (0x40012000)
libc.so.6 => /lib/libc.so.6 (0x4001c000)
libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 (0x40152000)
libnsl.so.1 => /lib/libnsl.so.1 (0x4015a000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x2aaaa000)
so, when any program runs that requires 'fcgi.so', it, in turn, will cause the
linker to look for all the other libs it needs. sometimes the paths will be
incomplete and the linker will need to look for the others in LD_LIBRARY_PATH
or /etc/ld.so.conf. it can happen (it has to me) that a module _you_ require
works completely find because the directory of the libs _it_ depends on are in
your LD_LIBRARY_PATH and ld.so can find them. however, when you are running a
cgi it is user nobody that is running the script and his LD_LIBRARY_PATH may
not have a path where the depending lib can be found. i think i saw this with
the postgres module before... any how, you can fix it by configuring ld.so
(/etc/ld.so.conf) _or_ by compiling with LD_RUN_PATH set, which hard codes the
paths into the shared module. or by setting the global LD_LIBRARY_PATH but i
forget how to do that.
the only reason i point that out is that redhat routinely does NOT have
/usr/local/lib configured as a place for ld.so to look and many packages will
install their libs exactly there.
-a
A while back I was able to set up ruby-fcgi on a gentoo installation of
linux without ever running into this problem. Does anybody have any ideas
about what might be wrong?
Thanks,
Carl Youngblood
P.S. In case it's helpful, here is the sample script I'm trying to run:
#!/usr/local/bin/ruby
require 'cgi'
require 'fcgi'
FCGI.each_cgi do |cgi|
content = ''
env = []
cgi.env_table.each do |k,v|
env << [k,v]
end
env.sort!
env.each do |k,v|
content << %Q(#{k} => #{v}<br>\n)
end
cgi.out{content}
end
====================================
| Ara Howard
| NOAA Forecast Systems Laboratory
| Information and Technology Services
| Data Systems Group
| R/FST 325 Broadway
| Boulder, CO 80305-3328
| Email: (e-mail address removed)
| Phone: 303-497-7238
| Fax: 303-497-7259
| The difference between art and science is that science is what we understand
| well enough to explain to a computer. Art is everything else.
| -- Donald Knuth, "Discover"
| ~ > /bin/sh -c 'for lang in ruby perl; do $lang -e "print \"\x3a\x2d\x29\x0a\""; done'
====================================