Hi.

I am using BackgrounDRb to process thumbnails and upload to S3 - things are hunky-dory in development (thumbs are generated, these are uploaded to S3, the metadata is saved to trhe DB, and I get a nice status page updated by periodic calls via ask_status), but when I tried to deploy to our staging server and stop/start BackgrounDRb via Capistrano, things blew up - well, not exactly, but when the app tried to hand off the thumbnail generation, I got a "Could not connect to the BackgrounDRb server" error.

Initially, when I didn't start the BDRb server manually, I got:

* executing `after_update_code'
* executing `set_env_staging'
ENV['RAILS_ENV'] = staging
* executing `restart_backgroundrb'
* executing `stop_backgroundrb'
* executing "cd /var/www/apps/my_app/releases/20080501133415 && ./ script/backgroundrb -e staging stop"
 servers: ["staging.my_app.com"]
 [staging.my_app.com] executing command
** [out :: staging.my_app.com] ./script/backgroundrb:46:in `initialize'
** [out :: staging.my_app.com] :
** [out :: staging.my_app.com] No such file or directory - /var/www/ apps/my_app/releases/20080501133415/tmp/pids/backgroundrb_22222.pid
** [out :: staging.my_app.com] (
** [out :: staging.my_app.com] Errno::ENOENT
** [out :: staging.my_app.com] )
** [out :: staging.my_app.com] from ./script/backgroundrb:46:in `open'
** [out :: staging.my_app.com] from ./script/backgroundrb:46
 command finished
*** [deploy:update_code] rolling back
* executing "rm -rf /var/www/apps/my_app/releases/20080501133415; true"
 servers: ["staging.my_app.com"]
 [staging.my_app.com] executing command
 command finished

So I tried manually starting backgroundrb on the staging server,, and the deployment went through successfully. But when I tried generating thumbs with a background worker, I got the "Could not connect to the BackgrounDRb server" error.

I check out from GitHub, and use Capistrano-ext for multistage deployments:

cap staging deploy

Before I deploy, I SSH into the VPS and do
script/backgroundrb -e staging start

in my config/deploy/staging.rb file:
----------------
set :rails_env, 'staging'
...

task :after_update_code do
 set_env_staging
 copy_mongrel_cluster_config
 restart_backgroundrb
end

desc "Sets the environment variable RAILS_ENV='staging'."
task :set_env_staging do
 ENV['RAILS_ENV'] = 'staging'
 puts "ENV['RAILS_ENV'] = #{ENV['RAILS_ENV']}"
end

desc "Copying the right mongrel cluster config for the current stage environment."
task :copy_mongrel_cluster_config do
run "cp -f #{release_path}/config/deploy/staging/mongrel_cluster.yml #{release_path}/config/mongrel_cluster.yml"
end

desc "Start the backgroundrb server"
 task :start_backgroundrb , :roles => :app do
run "cd #{current_path} && nohup ./script/backgroundrb start -- -r staging > #{current_path}/log/backgroundrb-cap.log 2>&1"
 end


desc "Stop the backgroundrb server"
task :stop_backgroundrb, :roles => :app do
 run "cd #{release_path} && ./script/backgroundrb -e staging stop"
end

desc "Restart the backgroundrb server"
task :restart_backgroundrb, :roles => :app do
 stop_backgroundrb
 start_backgroundrb
end

-------
Here's the exception_notifier backtrace:

[RAILS_ROOT]/vendor/plugins/backgroundrb/lib/backgroundrb.rb:81:in `dump_object' [RAILS_ROOT]/vendor/plugins/backgroundrb/lib/backgroundrb.rb:98:in `new_worker'
 [RAILS_ROOT]/app/models/uploader.rb:54:in `start_thumbnail_worker'
 [RAILS_ROOT]/app/controllers/photos_controller.rb:49:in `create'
/usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ mime_responds.rb:106:in `call' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ mime_responds.rb:106:in `respond_to'
 [RAILS_ROOT]/app/controllers/photos_controller.rb:47:in `create'
/usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ base.rb:1158:in `send' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ base.rb:1158:in `perform_action_without_filters' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ filters.rb:697:in `call_filters' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ filters.rb:689:in `perform_action_without_benchmark' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ benchmarking.rb:68:in `perform_action_without_rescue'
 /usr/lib/ruby/1.8/benchmark.rb:293:in `measure'
/usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ benchmarking.rb:68:in `perform_action_without_rescue' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ rescue.rb:199:in `perform_action_without_caching' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ caching.rb:678:in `perform_action' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/ connection_adapters/abstract/query_cache.rb:33:in `cache' /usr/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/ query_cache.rb:8:in `cache' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ caching.rb:677:in `perform_action' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ base.rb:524:in `send' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ base.rb:524:in `process_without_filters' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ filters.rb:685:in `process_without_session_management_support' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ session_management.rb:123:in `sass_old_process' /usr/lib/ruby/gems/1.8/gems/haml-1.8.1/lib/sass/plugin/rails.rb: 15:in `process' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ base.rb:388:in `process' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ dispatcher.rb:171:in `handle_request' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ dispatcher.rb:115:in `dispatch' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ dispatcher.rb:126:in `dispatch_cgi' /usr/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/ dispatcher.rb:9:in `dispatch' /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel/rails.rb:76:in `process' /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel/rails.rb:74:in `synchronize' /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel/rails.rb:74:in `process' /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel.rb:159:in `process_client'
 /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel.rb:158:in `each'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel.rb:158:in `process_client'
 /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel.rb:285:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel.rb:285:in `initialize'
 /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel.rb:285:in `new'
 /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel.rb:285:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel.rb:268:in `initialize'
 /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel.rb:268:in `new'
 /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel.rb:268:in `run'
/usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel/ configurator.rb:282:in `run' /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel/ configurator.rb:281:in `each' /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel/ configurator.rb:281:in `run' /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/bin/mongrel_rails:128:in `run' /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/lib/mongrel/command.rb: 212:in `run'
 /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.3/bin/mongrel_rails:281
 /usr/bin/mongrel_rails:19:in `load'
 /usr/bin/mongrel_rails:19

My backgroundrb.yml file:
:backgroundrb:
  :ip: 0.0.0.0

:development:
  :backgroundrb:
    :port: 11006     # use port 11006
    :log: foreground # foreground mode,print log messages on console
    :debug_log: true

:staging:
  :backgroundrb:
    :port: 22222      # use port 22222
    :lazy_load: true  # do not load models eagerly
    :debug_log: false # disable log workers and other logging

:production:
  :backgroundrb:
    :port: 33333      # use port 33333
    :lazy_load: true  # do not load models eagerly
    :debug_log: false # disable log workers and other logging

My worker:
class ThumbnailGeneratorWorker < BackgrounDRb::MetaWorker
  set_worker_name :thumbnail_generator_worker
  set_no_auto_load(true)

  def create(args = nil)
    register_status(:percent_complete => 0)
    args.each_with_index do |uploader_id, index|
      @uploader = Uploader.find(uploader_id)
      @uploader.generate_thumbnails
      percent_complete = ((index + 1) * 100) / args.length
logger.info "Thumbnail generation is #{percent_complete}% complete..."
      register_status(:percent_complete => percent_complete)
    end
    exit

  end
end

Any hints/help/ideas would be much appreciated.

Bobby
_______________________________________________
Backgroundrb-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/backgroundrb-devel

Reply via email to