Начну с экстравагантного случая с Rails 2.3.5, Devise 1.0.9 и RubyAMF
непонятно-какой-версии (http://code.google.com/p/rubyamf/). Уже больше года были рельса и рубиамф, потребовалось сделать аутентификацию пользователей. Естественно, выбрал devise. Подключил, настроил, всё ок. Запускаю приложение, хочу зарегать пользователя, получаю:
ArgumentError in SessionsController#new
wrong number of arguments (2 for 1)
В логе всё заканчивается на
path-to-gems/devise-1.0.9/lib/devise/controllers/internal_helpers.rb:123:in `render'
Смотрю в
internal_helpers.rb:123, там:
render action, :controller => controller_name
Далее лезу в
path-to-gems/actionpack-2.3.5/lib/action_controller/base.rb, нахожу:
def render(options = nil, extra_options = {}, &block)Хм... Два параметра и блок, как и требуется. Непонятно, небольшой ступор.
Потом я просветляюсь и понимаю, что кто-то переопределил метод render. Просматриваю lib. Ничего. С помощью джедайского поиска в NetBeans нахожу все вхождения 'render' в каталоге vendor. Ещё пару минут сортировки результатов поиска и, - вуаля, - вот он виновник:
vendor/plugins/rubyamf/util/action_controller.rb
ActionController::Base.class_eval do def render_with_amf(options = nil, &block) ... end alias_method_chain :render, :amf end
Действительно, переопределён render, который теперь принимает один параметр и блок. Возвращаю всё на круги своя - добавляю второй параметр:
def render_with_amf(options = nil, stub=nil, &block)
Запускаю, всё ок.
И на последок самое интересное. Проект rubyamf, оказывается, переехал на github. Захожу на его страницу, нахожу
util/action_controller.rbи вижу... что аффтар уже проделал всю работу и исправил код:
https://github.com/victorcoder/rubyamf_plugin/blob/master/util/action_controller.rb
def render_with_amf(options=nil, extra_options={}, &block)
Отсюда мораль: манкипатчить хорошо, но обновляться полезнее:)
TODO: добавить стили для кода
Немає коментарів:
Дописати коментар