将LDAP目录镜像为SQL表的Rails方法是什么?

时间:2010-09-29 21:09:17

标签: ruby-on-rails ruby coding-style ldap cron

所以我正在创建一个Rails应用程序,它将作为我们组织中联系信息的目录。但它并不像听起来那么简单。

  • 我们有一个大型启用LDAP的目录,其中包含组织中成千上万的所有用户的信息。
  • 我们有一个较小的,单独的启用LDAP的目录,其中包含数百个部门的附加信息,以及一些重复或优先于覆盖较大目录中的字段。
  • 我们希望手动编辑部分数据,以覆盖本地目录中的某些字段,这些字段将由Rails应用程序中的SQL表表示。
  • 远程目录将定期镜像为SQL表,并将比较3个表(组织,部门,本地)以选择应用程序中显示的正确值。

我知道这听起来很荒谬,但没有什么可以做的。我们的组织非常分散,这是获得我们想要的最直接的方式。

这是我的第二个Rails应用程序,所以我对大多数设计和管道都很满意,但我不知道定期轮询远程目录中的数据并将其导入我们的本地SQL表的最佳方法。

在我的应用中,我应该定期从LDAP将数据导入到我的表中吗?我是否使用Rails?我应该直接在Ruby中执行此操作并将其作为cron作业运行吗?

1 个答案:

答案 0 :(得分:2)

如果您希望将同步功能作为Rails应用程序的一部分,那么您可以在单独的模型类中创建该逻辑(让我们称之为LDAPSynchroniser)。

然后您可以从多个地方重复使用它,包括:

  • 手动同步的Rake任务;
  • Cron job运行Rake任务;
  • 从Web应用程序触发同步(考虑运行所需的时间!)

rake任务看起来像:

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

Web应用程序触发器将是常规控制器:

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中将数据导入到我的表中吗?

使用rake task + cron。

  

我使用Rails吗?

您可能需要启动rails,但您不需要为此运行rails Web服务器。 虽然您可能希望从Web应用程序本身触发任务。

  

我应该直接在Ruby中执行此操作并将其作为cron作业运行吗?

在Rails中执行此操作会更容易,因为您已经拥有了所需的模型。 使用Plain Ruby也可能,但我不认为这是值得的。