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