From: Jonas Hartmann Date: 2005-06-25T13:50:26+09:00 Subject: Re: FSDB, Apache, FastCGI - ERROR: FSDB::Database::DirIsImmutableError Jonas Hartmann wrote: > 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::Database::DirIsImmutableError >>> -- 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::Database.new('/tmp/my-data') > # notice > ^ > with > > db = FSDB::Database.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 besides that: all directories are being created as told (but that process thows a lot of errors by calling via terminal). besides all that I notice that the file: "..fsdb.meta.myself" is not beeing created by the www call of the script, while it is being created by the non terminal call/user call. atleast the file "myself" is beeing created in both cases, holding the data inserted in both cases.