3

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

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

4

1 回答 1

2

多亏了这里的信息和代码,我终于解决了这个问题。如果没有首先在主线程上调用,我win32ole.rb按照那里的建议修改了我的文件。CoInitialize我在 Rails 3 应用程序中通过将 Ruby 文件添加到config/initializers仅包含

require 'win32ole'

这似乎已经解决了它。

于 2011-03-10T16:32:32.050 回答