Я работаю над некоторыми приложениями среднего размера на Rails 3.1, и в настоящее время у меня возникают странные проблемы, возникающие случайным образом после запуска локального сервера .
Это происходит очень часто после запуска сервера, и в большинстве случаев, если не каждый раз, речь идет о неопределенном методе , который фактически определяется .
Если я затем добавлю binding.pry или отладчик непосредственно перед строкой, вызывающей сбой приложения, и я попытаюсь использовать себя таким способом, я получу ожидаемый результат (без сбоев). И если я покину консоль отладки, сервер просто вернется в нормальное состояние.
Например, я получаю:
NoMethodError (undefined method `type=' for #<Publication:0xb398f180>):
app/controllers/publications_controller.rb:115:in `new'
Если я перейду к этому контроллеру и добавлю binding.pry
@publication = current_user.publications.new
binding.pry
@publication.type = type
нажмите обновить, введите это в консоли
Publication.new.type = PublicationType.first
и затем выйдите из консоли, сервер просто возвращается в нормальное состояние.
Это, кажется, происходит только в моей местной среде. Я никогда не сталкивался с такой проблемой ни после развертывания, ни при запуске спецификаций.
Так как я единственный, это не так уж и плохо, но скоро другие разработчики будут работать над базой кода, так что это будет реальной проблемой.
РЕДАКТИРОВАТЬ:
Сегодня я столкнулся с этой другой ошибкой:
undefined method `color_class' for #<Publication:0xb39e44f0>
от
= link_to truncate(comment.publication.title, :length => 30), comment.publication, :class => "category-font #{comment.publication.color_class}"
тогда я просто сделал трюк binding.pry и набрал
comment.publication.color_class
потом покинул консоль и все прошло нормально ...
РЕДАКТИРОВАТЬ 2:
Хорошо, теперь это становится еще более странным ...
Я столкнулся с той же проблемой, что и выше, с color_class. За исключением этого времени описанный трюк не работает, смотрите вывод pry:
3: = link_to publication_path(comment.publication, :anchor => "comment-#{comment.id}") do
4: = link_to comment_excerpt(comment), comment_link(comment), :class => "comment_excerpt"
5: \-
6: = link_to comment.author.username, comment.author
7: \-
=> 8: - binding.pry
9: = link_to truncate(comment.publication.title, :length => 30),
comment.publication, :class => "category-font #{comment.publication.color_class}"
[1] pry(#>)> comment.publication.color_class
NoMethodError: undefined method `color_class' for #
from /home/jerefrer/.rvm/gems/ruby-1.8.7-p352/gems/activemodel-3.1.0/lib/active_model/attribute_methods.rb:385:in `method_missing'
[2] pry(#>)> comment.publication.category
NoMethodError: undefined method `category' for #
from /home/jerefrer/.rvm/gems/ruby-1.8.7-p352/gems/activemodel-3.1.0/lib/active_model/attribute_methods.rb:385:in `method_missing'
[3] pry(#>)> comment.publication.id
=> 139
[4] pry(#>)> comment.publication == Publication.find(139)
=> false
[5] pry(#>)> Publication.find(139).color_class
=> "some-class"
И я не могу найти какой-то трюк на этот раз ... просто продолжаю получать ту же ошибку ...
РЕДАКТИРОВАТЬ 3:
И новый!
> Comment.includes(:publication => :author).order('created_at DESC').limit(10)
Hirb Error: Association named 'author' was not found; perhaps you misspelled it?
> Comment.order('created_at DESC').limit(10)
[is working]
> Comment.order('created_at DESC').limit(10).first.author
[is working]
Есть идеи?