Наилучшая практика ежедневного импорта частичного дампа базы данных в приложение rails? - PullRequest
0 голосов
/ 19 ноября 2010

iTunes Enterprise Partner Feed - это «поток данных полного набора метаданных из iTunes и App Store» и «доступен в двух разных форматах - либо как файлы, необходимые для построения реляционныхбазы данных или как отдельные плоские файлы, которые зависят от страны и носителя. "

Мне нужно использовать данные из этого канала (который по существу экспортируется в плоские файлы) и разрешить связывание моих собственных объектов модели (пользователь, Активность и т. Д.) К данным, предоставляемым фидом (приложение, разработчик и т. Д.). Данные предоставляются в виде еженедельного полного экспорта и ежедневного добавочного экспорта.

У меня есть дваидеи для способов реализации этого:

  1. Создайте все модели в моем приложении rails и напишите мой собственный импортер, который будет ежедневно вставлять / обновлять записи непосредственно в базу данных моего приложения через cron, используя созданные мной модели.(Приложение, Разработчик и т. Д.)
  2. Храните эту базу данных совершенно отдельно и открывайте REST API, который будет использовать мое собственное приложение

Мой наивный подход с # 1 для сохранения всего в приложении Rails основан на необходимости наблюдать за изменениями в данных, которые я получаю из EPF.Например, если описание приложения обновлено, я хочу иметь возможность создавать объект Activity через наблюдателя для отслеживания этого обновления.

С одной стороны, # 2 выглядит как лучший подход, поскольку он создает автономный API для данных, которые можно использовать из нескольких различных приложений, которые я создаю.С другой стороны, я просто не уверен, как бы я выполнял уведомления об изменении данных, не используя наблюдателей непосредственно на моих собственных моделях.Или как я бы даже использовал данные объектно-ориентированным способом, который мог бы использоваться моими собственными моделями.Мне кажется, что нужно много работать, чтобы запросить API, скажем, о данных приложения, создать для него надлежащий объект Active Record и затем сохранить его, чтобы он мог быть связан с одной из моих собственных моделей.

Есть ли стандартный способ сделать это, что я полностью скучаю?Любые указатели?

РЕДАКТИРОВАТЬ: Движки Rails звучат интересно, но это будет означать, что каждое приложение по-прежнему должно потреблять и вставлять данные отдельно.Это не звучит так сухо.Звучит все больше и больше, как REST API - это путь.Я просто не знаю, как преодолеть разрыв между API и моделью Active Record.

1 Ответ

0 голосов
/ 19 ноября 2010

Rails Двигатели могут быть хорошо подходят для этого.Вы можете создать гем Rails Engine и добавить все свои модели и рейк-задачи для использования данных.Затем вы можете включить этот драгоценный камень в любое приложение, которое его использует, а также создать приложение API, которое включает этот драгоценный камень.Вы должны иметь возможность создавать наблюдателей в других ваших приложениях, которые взаимодействуют с жемчужиной.

У меня довольно много приложений, которые взаимодействуют друг с другом, и этот подход хорошо работает для меня.У меня есть одно центральное приложение, которое включает в себя все механизмы, которые используют данные, и я запускаю все свои cronjobs из этого приложения.Я использую плагин use_db, который позволяет моему приложению взаимодействовать с различными базами данных.Каждый движок имеет use_db в качестве зависимости, и я сохраняю конфигурацию базы данных внутри гема.Один пример:

  1. Жемчужина движка =action_core
  2. Этот жемчужина использует данные транзакции из источника и вставляет их в мою базу данных транзакций. центральное приложение и я извлекаем данные транзакции с помощью задачи rake на cron
  3. Я включил этот драгоценный камень в несколько других приложений, которым необходимо использовать данные транзакции.Поскольку движок автоматически добавляет модели и конфигурацию базы данных в приложение, для использования моделей в приложении не требуется никакой дополнительной работы.

Я не использовал наблюдателей в приложении, которое включает в себя мои движки,но я не вижу причин, почему это не сработает.С движком модели работают так, как будто они находятся в вашем каталоге app / models.Надеюсь, это поможет!

У Modest Rubyist есть хорошее руководство из 4 частей по плагинам Rails 3, которое включает в себя движки:
http://www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/

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