我正在尝试在Rails 3应用程序中使用win32ole gem并遇到一些我认为与线程相关的问题。基本上,我有这样的代码,用于从我们的Active Directory商店获取用户特定的数据:
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
。
我有什么想法可以解决这个问题吗?
答案 0 :(得分:2)
由于这些信息,我终于解决了这个问题。代码here。如果在主线程上没有首次调用win32ole.rb
,我将那里的CoInitialize
文件修改为barf。我在我的Rails 3应用程序中通过将一个Ruby文件添加到仅包含
config/initializers
目录来实现
require 'win32ole'
这似乎已经解决了。