Ara.T.Howard wrote:
> On Sat, 25 Jun 2005, Jonas Hartmann wrote:
>
>> when I run a script [1] from the command line, it works. it asks for
>> cgi pairs - key/value - cause it is in offline mode.
>>
>> when i run it through mod_fastcgi => ruby it does not work.
>>
>> a ruby script printing out the http_enviroment via FastCGI works (so
>> FastCGI works).
>>
>> If i run the script via browser (on
>> http://localhost/ruby/db_connect.rb) I get the following error +
>> backtrace:
>>
>> -- ERROR: FSDB:
atabase:
irIsImmutableError
>> -- BACKTRACE:
>> ./fsdb/lib/fsdb/database.rb:404:in `open_write_lock
>> ./fsdb/lib/fsdb/database.rb:620:in `[]=
>> ./fsdb/lib/fsdb/database.rb:619:in `object_exclusive
>> ./fsdb/lib/fsdb/database.rb:358:in `sync_object_exclusive
>> ./fsdb/lib/fsdb/database.rb:102:in `synchronize
>> ./fsdb/lib/fsdb/database.rb:102:in `sync_object_exclusive
>> ./fsdb/lib/fsdb/database.rb:358:in `object_exclusive
>> ./fsdb/lib/fsdb/database.rb:357:in `use_cache_entry
>> ./fsdb/lib/fsdb/database.rb:357:in `object_exclusive
>> ./fsdb/lib/fsdb/database.rb:619:in `[]=
>> /Library/WebServer/Documents/ruby/db_connect.rb:10/usr/local/lib/ruby/1.8/apache/ruby-run.rb:53:in
>> `load
>> /usr/local/lib/ruby/1.8/apache/ruby-run.rb:53:in `handler
>>
>> It seems to mean that I cannot change/write to the dir, right?
>>
>> I have no clue what I should do about that. How can i make the script
>> access the dir /tmp/my-data correctly? What is causing this error?
>
>
> you ran once as normal user - now user www (or whatever) can't access it.
to extend this case.
I can delete the temporary directories and run it via www user the
first time and the www user won't be able to access it.
To make it simple I exchanged:
db = FSDB:

atabase.new('/tmp/my-data')
# notice
^
with
db = FSDB:

atabase.new('tmp/my-data')
i ran it again via normal user/terminal on darwin - it again works.
then i deleted the tmp directory that had been created, and after
that ran it again via browser/webserver:
it now says:
-- ERROR: Insecure operation - directory?
-- BACKTRACE:
/usr/local/lib/ruby/1.8/ftools.rb:204:in `directory?
/usr/local/lib/ruby/1.8/ftools.rb:204:in `makedirs
/usr/local/lib/ruby/1.8/ftools.rb:202:in `each
/usr/local/lib/ruby/1.8/ftools.rb:202:in `makedirs
/usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:147:in `initialize
/Library/WebServer/Documents/ruby/db_connect.rb:8:in `new
/Library/WebServer/Documents/ruby/db_connect.rb:8/usr/local/lib/ruby/1.8/apache/ruby-run.rb:53:in
`load
/usr/local/lib/ruby/1.8/apache/ruby-run.rb:53:in `handler
> blow away the dir
I have already tried that. gives this error:
-- ERROR: undefined method `close' for nil:NilClass
-- BACKTRACE:
/usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:318:in `inc_version_of
/usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:622:in `[]=
/usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:620:in `open_write_lock
/usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:620:in `[]=
/usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:619:in
`object_exclusive
/usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:358:in
`sync_object_exclusive
/usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:102:in `synchronize
/usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:102:in
`sync_object_exclusive
/usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:358:in
`object_exclusive
/usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:357:in `use_cache_entry
/usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:357:in
`object_exclusive
/usr/local/lib/ruby/site_ruby/1.8/fsdb/database.rb:619:in `[]=
/Library/WebServer/Documents/ruby/db_connect.rb:10/usr/local/lib/ruby/1.8/apache/ruby-run.rb:53:in
`load
/usr/local/lib/ruby/1.8/apache/ruby-run.rb:53:in `handler
> and try again OR do a recursive chown of the dir to
> apache
> as root.
>
>>
>> It should just print "Hello world, and hello database!\n" (and does
>> that in offlinemode via "ruby db_connect.rb" + CTRL+D
>>
>>
>> [1]: http://rafb.net/paste/results/6VIFri64.html
>>
>
> -a