Experiment (in my local)
de.oddb.org/lib/oddb/export/server.rb
def Server.safe_export(exporter_class, name, *args, &block) dir = ODDB.config.export_dir or raise "Please configure 'export_dir'" FileUtils.mkdir_p(dir) Tempfile.open(name, dir) { |fh| exporter = exporter_class.new args.push fh exporter.export *args fh.close newpath = File.join(dir, name) FileUtils.mv(fh.path, newpath) FileUtils.chmod(0644, newpath) compress(dir, name) if(exporter_class == Export::Xls::ComparisonDeCh) unless(exporter.error_data.empty?) message = "\nThe following data was not able to be compared due to NoMethodError:\n" backtrace_info = "The original backtrace information:\n" + exporter.backtrace_info.join("\n").to_s + "\n" raise NoMethodError, message + exporter.error_data.join("\n").to_s + "\n\n" + backtrace_info end end } name
de.oddb.org/lib/oddb/export/xls.rb
class ComparisonDeCh attr_reader :error_data attr_reader :backtrace_info def collect_comparables(drb_uri) data = [] @error_data = [] @backtrace_info = [] count = 0 DRb::DRbObject.new(nil, drb_uri).remote_each_package { |remote| count += 1 package = Remote::Drugs::Package.new(drb_uri, remote, 1.0 / currency_rate, tax_factor) begin if count == 1 or count == 2 raise NoMethodError end if(package.price(:public) \ && (comparable = package.local_comparables.select { |pac| pac.price(:public) }.sort_by { |pac| pac.price(:public) }.first)) data.push [comparable, package] end rescue NoMethodError => err @error_data.push("http://ch.oddb.org/en/gcc/compare/ean13/" + package.code(:ean).value) @backtrace_info.push("\nhttp://ch.oddb.org/en/gcc/compare/ean13/" + package.code(:ean).value) @backtrace_info.concat err.backtrace end nil # don't return data from the block across drb } data end
Run export_chde_xls
Result Email Thu Oct 21 17:11:00 2010: ODDB::Export::Xls::ComparisonDeCh
Thu Oct 21 17:11:00 2010: ODDB::Export::Xls::ComparisonDeCh#export NoMethodError The following data was not able to be compared due to NoMethodError: http://ch.oddb.org/en/gcc/compare/ean13/7680546700362 http://ch.oddb.org/en/gcc/compare/ean13/7680583510016 The original backtrace information: http://ch.oddb.org/en/gcc/compare/ean13/7680546700362 /home/masa/ywesee/de.oddb.org/lib/oddb/export/xls.rb:39:in `collect_comparables' /usr/lib64/ruby/1.8/drb/drb.rb:1556:in `call' /usr/lib64/ruby/1.8/drb/drb.rb:1556:in `__send__' /usr/lib64/ruby/1.8/drb/drb.rb:1556:in `perform_without_block' /usr/lib64/ruby/1.8/drb/drb.rb:1516:in `perform' /usr/lib64/ruby/1.8/drb/drb.rb:1590:in `main_loop' /usr/lib64/ruby/1.8/drb/drb.rb:1586:in `loop' /usr/lib64/ruby/1.8/drb/drb.rb:1586:in `main_loop' /usr/lib64/ruby/1.8/drb/drb.rb:1582:in `start' /usr/lib64/ruby/1.8/drb/drb.rb:1582:in `main_loop' /usr/lib64/ruby/1.8/drb/drb.rb:1431:in `run' /usr/lib64/ruby/1.8/drb/drb.rb:1428:in `start' /usr/lib64/ruby/1.8/drb/drb.rb:1428:in `run' /usr/lib64/ruby/1.8/drb/drb.rb:1348:in `initialize' /usr/lib64/ruby/1.8/drb/drb.rb:1628:in `new' /usr/lib64/ruby/1.8/drb/drb.rb:1628:in `start_service' /home/masa/ywesee/de.oddb.org/lib/oddb/util/job.rb:13:in `run' jobs/export_chde_xls:16 http://ch.oddb.org/en/gcc/compare/ean13/7680583510016 /home/masa/ywesee/de.oddb.org/lib/oddb/export/xls.rb:39:in `collect_comparables' /usr/lib64/ruby/1.8/drb/drb.rb:1556:in `call' /usr/lib64/ruby/1.8/drb/drb.rb:1556:in `__send__' /usr/lib64/ruby/1.8/drb/drb.rb:1556:in `perform_without_block' /usr/lib64/ruby/1.8/drb/drb.rb:1516:in `perform' /usr/lib64/ruby/1.8/drb/drb.rb:1590:in `main_loop' /usr/lib64/ruby/1.8/drb/drb.rb:1586:in `loop' /usr/lib64/ruby/1.8/drb/drb.rb:1586:in `main_loop' /usr/lib64/ruby/1.8/drb/drb.rb:1582:in `start' /usr/lib64/ruby/1.8/drb/drb.rb:1582:in `main_loop' /usr/lib64/ruby/1.8/drb/drb.rb:1431:in `run' /usr/lib64/ruby/1.8/drb/drb.rb:1428:in `start' /usr/lib64/ruby/1.8/drb/drb.rb:1428:in `run' /usr/lib64/ruby/1.8/drb/drb.rb:1348:in `initialize' /usr/lib64/ruby/1.8/drb/drb.rb:1628:in `new' /usr/lib64/ruby/1.8/drb/drb.rb:1628:in `start_service' /home/masa/ywesee/de.oddb.org/lib/oddb/util/job.rb:13:in `run' jobs/export_chde_xls:16 /home/masa/ywesee/de.oddb.org/lib/oddb/export/server.rb:68:in `safe_export' /usr/lib64/ruby/1.8/tempfile.rb:172:in `open' /home/masa/ywesee/de.oddb.org/lib/oddb/export/server.rb:54:in `safe_export' /home/masa/ywesee/de.oddb.org/lib/oddb/export/server.rb:25:in `export_chde_xls' jobs/export_chde_xls:17 /home/masa/ywesee/de.oddb.org/lib/oddb/util/job.rb:16:in `call' /home/masa/ywesee/de.oddb.org/lib/oddb/util/job.rb:16:in `run' jobs/export_chde_xls:16
Commit