我試圖在Rails 3應用程序中使用win32ole gem,並遇到一些我認爲與線程相關的問題。基本上,我有這樣的代碼,我用它來從我們的活動目錄商店獲得用戶特定的數據:如何從rails應用程序安全地使用WIN32OLE?
root = WIN32OLE.connect("LDAP://RootDSE")
但是這給當作爲Rails的請求的一部分運行零星的錯誤(我想以後的第一個請求Rails應用程序已重新啓動始終有效)。它運行良好每次當我從一個獨立的Ruby應用程序運行此代碼。我從一些谷歌搜索瞭解到,這是由於OLE/COM對象只能用在它最初初始化的線程中(與它在STA中運行有關?)。從那裏我猜測,這是Rails 3在不同的線程上運行不同的請求的事情? (我的Rails應用程序在Windows機器上運行。)
WIN32OLE.connect
調用拋出的錯誤是'connect': failed to parse display name of moniker
。
任何想法如何解決這個問題?
本。這是未來的談話。你在這裏提到的鏈接現在已經死了。我需要你從過去的知識! – Aarmora 2014-06-06 01:46:36
對不起,我再次找不到確切的鏈接。即使如此,你也不需要參考它:只要確保在任何調用創建一個'WIN32OLE'對象之前調用'CoInitialize'。我在Rails中遇到這個問題的唯一原因是因爲線程競爭條件。 Rails初始化器可以用來解決這個問題。 – Ben 2015-08-28 16:18:24