From: Jonas Hartmann Date: 2005-06-25T13:28:34+09:00 Subject: Re: FSDB, Apache, FastCGI - ERROR: FSDB::Database::DirIsImmutableError 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