Какой способ Rails отразить каталог LDAP в виде таблицы SQL? - PullRequest
1 голос
/ 30 сентября 2010

Итак, я создаю приложение Rails, которое будет функционировать как каталог для контактной информации в нашей организации. Но это не так просто, как кажется.

  • У нас есть большой LDAP-каталог, который содержит информацию для всех пользователей в нашей организации из десятков тысяч.
  • У нас есть меньший , отдельный каталог с поддержкой LDAP, который содержит дополнительную информацию для нашего отдела из нескольких сотен, а также некоторую информацию , дублирующую или имеет приоритет над полями в большем каталоге.
  • Мы хотим вручную отредактировать некоторые из этих данных, чтобы переопределить некоторые поля в нашем каталоге local , который будет представлен таблицей SQL в приложении Rails.
  • Удаленные каталоги будут периодически зеркально отображаться как таблицы SQL, а 3 таблицы (Организация, Отдел, Локальные) будут сравниваться для выбора правильного значения, отображаемого в приложении.

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

Это мое второе приложение на Rails, так что я доволен большей частью дизайна и сантехники, но я не знаю лучшего способа периодически опрашивать данные из удаленных каталогов и импортировать их в наши локальные таблицы SQL.

Где в моем приложении я должен периодически импортировать данные в мои таблицы из LDAP? Использую ли я Rails? Должен ли я сделать это в прямом Ruby и запустить его как работу cron?

1 Ответ

2 голосов
/ 30 сентября 2010

Если вы хотите, чтобы функциональность синхронизации была частью вашего приложения Rails, то вы можете создать эту логику в отдельном классе модели (назовем его LDAPSynchroniser).

Затем вы можете использовать его из нескольких мест, в том числе:

  • Задача Rake для ручной синхронизации;
  • Задание Cron Запуск задания Rake;
  • Запустить синхронизацию из веб-приложения (учитывать время, необходимое для запуска!)

Задание с рейком будет выглядеть так:

task :cron => :ldapsync do
  puts "Sync-ing with LDAP..."
  status = LDAPSynchroniser.new.run
  puts "done: #{status.to_s}"
end

Триггером веб-приложения будет обычный контроллер:

def LDAPSyncController < ...
  # probably authentication is needed...
  def sync
    status = LDAPSynchroniser.new.run # or run it in a separate thread-ish
    # respond with status
  end
end

Теперь, чтобы ответить на ваши вопросы:

Где в моем приложении я должен периодически импортировать данные в мои таблицы из LDAP?

Используйте грабли + крон.

Использую ли я Rails?

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

Должен ли я сделать это прямо на Ruby и запустить его как задание cron?

Делать это в Rails было бы немного проще, так как у вас уже есть модель и все, что вам нужно. С Plain Ruby это тоже возможно, но я не думаю, что оно того стоит.

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