Ошибка маршрутизации после вызова RDF :: RDFa :: Reader - PullRequest
0 голосов
/ 28 сентября 2011

Я уже писал вопрос по этому поводу, но он был неясен. Я упростил код, чтобы я мог скопировать его здесь и сделать его максимально простым. Я до сих пор не уверен, что лучший способ отладки это может быть, но здесь это идет:

Мое «новое» действие (может быть любым) для ресурса (опять же, может быть любым):

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, все работает нормально. Я не знаю, что могло вызвать это.

1 Ответ

1 голос
/ 29 сентября 2011

Камень RDF не использует Nokogiri, но камень RDF :: RDFa использует. Например, вы можете попробовать запустить его с помощью входного файла Turtle и посмотреть, получите ли вы те же результаты.

Queryable # each_statement использует итератор, но я не понимаю, как это может заразить контекст, в котором вы работаете. Вы можете посмотреть, были ли определены какие-либо новые методы в @base_item. Возможно, некоторые классы RDF определяют методы, которые мешают работе Rails, что может быть ошибкой.

Если вы можете сделать короткий пример, я могу рассмотреть его дальше. Отправьте вопрос в http://github.com/gkellogg/rdf/issues (если это не относится к RDF :: RDFa), или в rdf-rdfa / выдает иначе.

...