Ruby on rails 西德基。如何捕捉生产中的错误?
我有几个工人在日志中没有错误。但生产中的同一代码有时会显示错误。这并不重要,但我想了解区别是什么,以及如何捕获和修复错误。此处显示部分日志,其中有错误:Ruby on rails 西德基。如何捕捉生产中的错误?,ruby-on-rails,sidekiq,Ruby On Rails,Sidekiq,我有几个工人在日志中没有错误。但生产中的同一代码有时会显示错误。这并不重要,但我想了解区别是什么,以及如何捕获和修复错误。此处显示部分日志,其中有错误: 2016-01-18T16:34:10.725Z 535 TID-otb5ze3fo TopUpdateWorker JID-73c584ed6fec322784d67796 INFO: start 2016-01-18T16:34:10.725Z 535 TID-otb5ze3fo TopUpdateWorker JID-73c584ed6f
2016-01-18T16:34:10.725Z 535 TID-otb5ze3fo TopUpdateWorker JID-73c584ed6fec322784d67796 INFO: start
2016-01-18T16:34:10.725Z 535 TID-otb5ze3fo TopUpdateWorker JID-73c584ed6fec322784d67796 INFO: Things are happening.
2016-01-18T16:34:10.824Z 535 TID-otb5ze3fo TopUpdateWorker JID-73c584ed6fec322784d67796 INFO: fail: 0.099 sec
2016-01-18T16:34:10.824Z 535 TID-otb5ze3fo WARN: {"class"=>"TopUpdateWorker", "args"=>[], "retry"=>3, "queue"=>"default", "jid"=>"73c584ed6fec322784d67796", "created_at"=>1453134850.724368, "enqueued_at"=$
2016-01-18T16:34:10.824Z 535 TID-otb5ze3fo WARN: TypeError: no implicit conversion of nil into Array
2016-01-18T16:34:10.824Z 535 TID-otb5ze3fo WARN: /var/www/vkgazer/code/lib/modules/common_mods.rb:27:in `+'
/var/www/vkgazer/code/lib/modules/common_mods.rb:27:in `get_request'
/var/www/vkgazer/code/app/models/post.rb:170:in `top_post_updater'
/var/www/vkgazer/code/app/workers/top_update_worker.rb:9:in `perform'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:150:in `execute_job'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:132:in `block (2 levels) in process'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/middleware/chain.rb:127:in `block in invoke'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/middleware/server/active_record.rb:6:in `call'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/middleware/chain.rb:129:in `block in invoke'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/middleware/server/retry_jobs.rb:74:in `call'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/middleware/chain.rb:129:in `block in invoke'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/middleware/server/logging.rb:11:in `block in call'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/logging.rb:30:in `with_context'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/middleware/server/logging.rb:7:in `call'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/middleware/chain.rb:129:in `block in invoke'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/middleware/chain.rb:132:in `call'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/middleware/chain.rb:132:in `invoke'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:127:in `block in process'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:166:in `stats'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:126:in `process'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:79:in `process_one'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:67:in `run'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/util.rb:16:in `watchdog'
/var/www/vkgazer/code/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/util.rb:24:in `block in safe_thread'
错误总是在这个字符串中。代码如下:
def get_request(code) #
i = 0
result = []
while i < code.size #
part_code = code.slice(i, 25)
if part_code.size >1
str_code = part_code.join(',')
else
str_code = part_code[0]
end
url='https://api.x.com/method/execute'
uri = URI.parse(url)
parameters = {'access_token' => '00',
'code' => "return [#{str_code}];", 'v' => '2'}
response = Net::HTTP.post_form(uri, parameters) #
result = result + JSON.parse(response.body)['response'] #here is error
i += 25
sleep 0.35
end
result #
end
def get_请求(代码)#
i=0
结果=[]
而我'00',
'code'=>“return[#{stru code}];”,'v'=>“2'}
response=Net::HTTP.post_表单(uri,参数)#
result=result+JSON.parse(response.body)['response']#这里是错误
i+=25
睡眠0.35
结束
结果#
结束
在这里,我向API发送请求,并将所有响应相加。还有一件事,在开发阶段,我的工作持续时间不到10秒,但在生产阶段可以是160秒。我的计算机比服务器更好?所以任何时候你的
响应.body
包含一个“空”响应,比如“{}”
或者如果它只是缺少'response'
元素,那么JSON.parse(response.body)['response']
将是nil
,因此你的代码试图做到:
result + nil
…你会犯这个错误。也许最好的解决办法是这样:
result = result + ( JSON.parse(response.body)['response'] || [] )
这是由于
JSON.parse(response.body)['response']
为零造成的。简而言之,响应是正确的JSON,但上面没有响应字段。现在,修复取决于您在这种情况下想做什么。@BroiSatse肯定您是对的,但为什么它只发生在生产中?从IP黑名单开始,有上千种可能的原因。您需要记录响应本身,它应该包含发生的原因的线索(类似于{“error”:“我不喜欢您”}
)。这完全取决于您向哪个服务发送请求。@BroiSatse谢谢,这是非常有用的评论。我不知道如何记录,但我会学习的。