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