У меня мало работников, у которых нет ошибок в журнале. Но тот же код в производстве время от времени показывает ошибки. Это не критично, но я хочу понять, в чем разница и как поймать и исправить ошибки. Здесь часть журнала с ошибкой: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-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
Здесь я отправляю запросы API и суммирую все ответы в результате. И еще одна вещь в развитии у меня продолжительность работы менее 10 секунд, но в производстве она может составлять 160 сек. Мой компьютер лучше, чем сервер?
Это вызвано 'JSON.parse (response.body) ['response']' be nil. Короче говоря, ответ является правильным JSON, но на нем нет поля ответа. Теперь исправление зависит от того, что вы хотите сделать в этом случае. – BroiSatse
@BroiSatse Уверен, что вы правы, но почему это происходит только в производстве? – nobilik
Существует тысячи возможных причин, начиная с ввода в черный список IP. Вам нужно самому зарегистрировать ответ, он должен содержать подсказку, почему это происходит (например, '{" error ":" Мне не нравится "}}. Все зависит от услуги, на которую вы отправляете запрос. – BroiSatse