2010-09-29 29 views
1

因此,我創建了一個Rails應用程序,它將用作我們組織中聯繫人信息的目錄。但它並不像聽起來那麼簡單。將LDAP目錄鏡像爲SQL表的Rails方式是什麼?

  • 我們有一個包含在我們的數萬組織所有用戶的信息支持LDAP的目錄中。
  • 我們有一個,獨立的支持LDAP的目錄中包含了數百我們部門更多的信息,以及複製或採取優先了在更大的目錄域的一些信息
  • 我們希望手動編輯一些這些數據來覆蓋我們的本地目錄中的一些字段,這些字段將由Rails應用程序中的SQL表格表示。
  • 遠程目錄將定期鏡像爲SQL表,並將3個表(組織,部門,本地)進行比較,以選擇應用中顯示的正確值。

我知道這聽起來很荒謬,但沒有辦法做到這一點。我們的組織非常分散,這是獲得我們想要的最直接的方式。

這是我的第二個Rails應用程序,所以我對大部分設計和管道都很滿意,但我不知道定期輪詢遠程目錄中的數據並將其導入到本地SQL表中的最佳方式。

在我的應用程序中,我應該定期從LDAP導入數據到我的表中?我使用Rails嗎?我應該直接在Ruby中執行此操作並將其作爲cron作業運行?

回答

2

如果您希望將同步功能作爲Rails應用程序的一部分,則可以在單獨的模型類中創建該邏輯(我們稱之爲LDAPSynchroniser)。

然後你就可以從多個地方重用,其中包括:手動syncronisation

  • Rake任務;
  • Cron作業運行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任務+ cron。

我使用Rails嗎?

您可能需要啓動rails,但不需要爲此運行rails web服務器。 儘管您可能想從Web應用程序本身觸發任務。

我應該直接在Ruby中執行此操作並將其作爲cron作業運行嗎?

在Rails中做它會稍微容易一些,因爲您已經擁有了您的模型和所有您需要的東西。 使用普通Ruby也可能,但我不認爲這是值得的努力。

+0

優秀的答案!這聽起來不錯,我可能會用rake task + cron去。我會稍微等一下,看看是否有其他建議。 – 2010-09-30 17:38:35

+0

稍微研究了一下rake任務之後,我迫不及待地想把它付諸實踐。謝謝! – 2010-10-01 18:03:26

相關問題