Анемон с Rails и MongoDB - PullRequest
       24

Анемон с Rails и MongoDB

1 голос
/ 24 февраля 2012

Я готовлюсь написать свой первый веб-сканер, и похоже, что Анемон имеет больше смысла. Существует встроенная поддержка хранилища MongoDB , и я уже использую MongoDB через Mongoid в своем приложении Rails. Моя цель - сохранить просканированные результаты, а затем получить к ним доступ через Rails. У меня есть пара проблем:

1) В конце этой страницы говорится, что " Примечание: Каждый механизм хранения удалит существующие данные Anemone перед началом нового сканирования." Я ожидал бы, что это произойдет в конце сканирования, если я буду использовать хранилище памяти по умолчанию, но не следует ли сохранять записи в MongoDB неопределенно долго, чтобы дублированные страницы не сканировались при следующем запуске задачи? Если они были стерты "перед началом нового сканирования" , то должен ли я просто запустить свою логику Rails до следующего сканирования? Если это так, то мне придется проверять наличие дублирующих записей из предыдущего сканирования.

2) Я впервые задумался об использовании MongoDB вне контекста моделей Rails. Похоже, записи создаются с использованием класса Page, поэтому я могу позже просто запросить их, как обычно, используя Mongoid? Я полагаю, это просто считается «моделью», если в ней есть ORM, предоставляющий необычные методы?

1 Ответ

3 голосов
/ 24 февраля 2012

Великолепные вопросы.

1) Это зависит от вашей цели.

В большинстве случаев это значение по умолчанию имеет смысл. Один выполняет ползание с анемоном и анализирует данные.

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

Вы можете указать движку хранилища новую коллекцию, прежде чем начинать новое сканирование, если вы не хотите, чтобы это произошло.

2) Mongoid не будет создавать классы моделей для вас.

Вам нужно определить модели, чтобы mongoid знал, как создать класс для коллекции, и при желании определить поля, которые есть у каждого документа, чтобы вы могли использовать метод доступа . из коробки.

Что-то вроде:

class Page
  include Mongoid::Document
  field :url, type: String #i'm guessing, check what kind of docs anemone produces
  field :aliases, type: Array
  field ....
end

Вероятно, потребуется включить следующие поля:

  • url - URL страницы
  • псевдонимы - другие URL-адреса, перенаправляемые на эту страницу, или на страницу, на которую перенаправляется эта страница заголовки - полные заголовки ответа HTTP
  • код - код ответа HTTP (например, 200, 301, 404)
  • body - Необработанное тело HTTP-ответа
  • doc - A Nokogiri :: HTML :: Документ тела страницы (если применимо)
  • ссылки - Массив всех URL-адресов, найденных на странице, которые указывают на один и тот же домен

Но, пожалуйста, просто посмотрите, какой тип (строка, массив и т. Д.) Механизм хранения хранит их, и не делайте предположений.

Удачи!

...