3

Rails 3アプリでwin32olegemを使用しようとしていますが、スレッドに関連していると思われる問題が発生しています。基本的に、ActiveDirectoryストアからユーザー固有のデータを取得するために使用する次のようなコードがあります。

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場合は、barfに提案されているようにファイルを変更しました。Rails 3アプリで、Rubyファイルを以下を含むディレクトリに追加することでそれCoInitializeを達成しました。config/initializers

require 'win32ole'

それはそれを修正したようです。

于 2011-03-10T16:32:32.050 に答える