如何从rails应用程序安全地使用WIN32OLE?

时间:2011-03-04 07:48:01

标签: ruby-on-rails win32ole

我正在尝试在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

我有什么想法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

由于这些信息,我终于解决了这个问题。代码here。如果在主线程上没有首次调用win32ole.rb,我将那里的CoInitialize文件修改为barf。我在我的Rails 3应用程序中通过将一个Ruby文件添加到仅包含

config/initializers目录来实现
require 'win32ole'

这似乎已经解决了。