我对Ruby知之甚少,但继承了一个最近开始出现问题的Ruby应用程序。
有一个基于Resque的作业定期运行,几个月来一直运行良好,直到现在它突然停止了工作。我验证了代码没有更改,因此认为这可能是一个与数据相关的问题。
它运行了大约一分钟,然后在Resque中显示为错误。
Retried just now
Remove
ClassProcessor::ReportRunnerArguments
ExceptionNoMethodErrorErrorundefined method `nass_code' for nil:NilClass
/var/www/applications/usps/app/models/report.rb:58:in `build_node'
/var/www/applications/usps/lib/processor/processor/reporter.rb:9:in `block in prep'
/usr/local/rvm/gems/ruby1.9.3p448/gems/activerecord3.2.8/lib/active_record/relation/delegation.rb:6:in `each'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.8/lib/active_record/relation/delegation.rb:6:in `each'
/var/www/applications/usps/lib/processor/processor/reporter.rb:8:in `prep'
/var/www/applications/usps/lib/processor/processor/reporter.rb:15:in `execute'
/var/www/applications/usps/app/models/owner.rb:33:in `gone'
/var/www/applications/usps/lib/processor/processor/report_runner.rb:5:in `perform'
有问题的代码行是:
<tran:NassCode>"+self.trip.master_destination.nass_code+"</tran:NassCode>
master_destination来自app/models/strip.rb:
class Trip < ActiveRecord::Base
belongs_to :contract
belongs_to :origin, :class_name => 'Location'
belongs_to :destination, :class_name => 'Location'
belongs_to :frequency
...
def master_destination
return master_trip_end.destination
end
该Destination是对Location.rb的引用,该错误中引用了"nass_code"。
class Location < ActiveRecord::Base
belongs_to :owner
has_one :address, :as => :owner, :dependent => :destroy
attr_accessible :name, :nass_code, :radius, :address_attributes
我知道这没什么好说的,但关于是什么导致了这种错误的任何线索或想法,等等…
至少有一条记录的master_destination返回null
我会在master_destination中添加一个调试语句,它只输出您当前正在处理的行程
当它崩溃时,就在崩溃之前,你会看到什么旅程有问题。