Ruby NameError неопределенная локальная переменная или метод `e - PullRequest
4 голосов
/ 28 августа 2011
class TwitterProfile < ActiveRecord::Base

  def send_status_update(status_update)
    if publish?
      client = Twitter::Client.new( :oauth_token => authentication.token,
                           :oauth_token_secret => authentication.secret)
      client.update(status_update.to_twitter_string)
    end
  rescue Exception => e
    logger.info "Error publishing to twitter: #{e.to_s}"
  end
end

Существует модель StatusUpdate и наблюдатель, который публикует их в Twitter в after_create. Я иногда получаю следующее исключение:

NameError (undefined local variable or method `e' for #<TwitterProfile:0x00000004e44ab8>):
app/models/twitter_profile.rb:23:in `rescue in send_status_update'
app/models/twitter_profile.rb:18:in `send_status_update'
app/models/status_update_observer.rb:6:in `block in after_create'
app/models/status_update_observer.rb:4:in `after_create'
app/models/workout_observer.rb:5:in `after_update'
app/controllers/frames_controller.rb:76:in `update'
app/controllers/application_controller.rb:24:in `call'
app/controllers/application_controller.rb:24:in `block (2 levels) in <class:ApplicationController>'
app/controllers/application_controller.rb:10:in `block in <class:ApplicationController>'

Что мне здесь не хватает?

Ответы [ 2 ]

2 голосов
/ 29 августа 2011

У меня есть одна вещь, которую я знаю, а другая - просто дикая догадка.

Я знаю, что вам не нужно вызывать to_s для общего выражения #{}; это произойдет автоматически. Но это не вредит.

Мое странное предположение, что ваш тестовый пример не выполняет код, который вы опубликовали. Что произойдет, если вы измените e на f?

Я должен отметить, что спасение самого Exception обычно является плохой идеей. Вы должны спасти RuntimeError или StandardError на самом высоком уровне, и желательно что-то более конкретное. При спасении Exception вы можете получить довольно странные ошибки, поскольку вы вмешиваетесь в потоки и события уровня интерпретатора.

0 голосов
/ 28 августа 2011

Вам не хватает блока 'begin' предложения begin / rescue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...