Я уже писал вопрос по этому поводу, но он был неясен. Я упростил код, чтобы я мог скопировать его здесь и сделать его максимально простым. Я до сих пор не уверен, что лучший способ отладки это может быть, но здесь это идет:
Мое «новое» действие (может быть любым) для ресурса (опять же, может быть любым):
def new
RDF::RDFa::Reader.open("http://www.tripadvisor.com/Hotel_Review-g186525-d280839-Reviews-Gerald_s_Place-Edinburgh_Scotland.html") do |r|
r.each_statement do |statement|
Rails.logger.debug(statement)
end
end
respond_to do |format|
format.html { }# new.html.haml
format.json { render json: @base_item }
format.js
end
end
Страница отображается нормально, и код RDF успешно выполняется, однако, когда я обновляю страницу или пытаюсь получить доступ к чему-либо еще, я получаю следующее (замените 'base_item' любым ресурсом, к которому я пытаюсь получить доступ, они все ошибка с этой ошибкой):
ActionController::RoutingError (private method `redefine_method' called for #<Class:0x000001058527c0>):
app/models/base_item.rb:3:in `<class:BaseItem>'
app/models/base_item.rb:2:in `<top (required)>'
app/controllers/base_items_controller.rb:3:in `<top (required)>'
Мне интересно, относится ли это к гему rdf (который использует nokogiri) или это общая проблема маршрутизации, но не нашел способа проверить это.
Любая помощь приветствуется.
EDIT:
Кажется, это связано со строкой r.each_statement, как будто я убрал это, все продолжает работать ..
UPDATE:
Я не смог воспроизвести это вне Rails, но я сузил это до проблемы с ActiveRecord. Я настроил пример приложения на https://github.com/slamorsi/rdfTest
Существует две модели: Test и TestChild. Ошибка воспроизводима, если Test и TestChild связаны между собой - сейчас Test имеет отношение has_many с TestChild. Корень приложения идет к тесту # index, в котором есть образец кода RDF / RDFa. Если вы загрузите страницу один раз, а затем обновите, вы увидите ошибку 'redefine method named ...'. Если между моделями нет взаимосвязи или если не выполнен код RDF / RDFa Statement.each, все работает нормально. Я не знаю, что могло вызвать это.