0

C/Objective-C 用の Ruby 拡張機能をビルドして、Ruby on Rails Web アプリケーションで使用したいと考えていますが、それを要求しようとするたびに WEBrick がクラッシュします。私が持っているものは次のとおりです。

  1. C クラス (MyExtension) に関連付けられている Ruby クラス: MyRubyObject があります。
  2. MyRubyObject は 1 つのメソッドで定義されています: myRubyMethod は私の C クラスの関数に関連付けられています。MyExtension: 文字列を返すだけの myextensionmethod です。
  3. myextensionmethod は本質的に別のライブラリを呼び出します。このライブラリは一連の作業 (複数のスレッドなど) を実行しますが、最終的には文字列を返します。
  4. すべてをコンパイルした後、MyRubyObject.bundle ファイルを取得します。IRB を使用すると、次のことができます。

    require './MyRubyObject' p = MyRubyObject.new p.myRubyMethod => "結果!"

  5. これはすべて問題なく動作し、RoR アプリで使用したいと考えています。

  6. MyRubyObject.bundle を RoR アプリの lib に配置し、コントローラー クラスから require ./lib/MyRubyObject.bundle を実行すると、WEBrick がクラッシュします!!!!

どんな助けでも大歓迎です!!!

乾杯

4

1 に答える 1

0

ここから解決策を見つけました: ruby​​-ldap gem は rails3 アプリでは動作しませんが、rails コンソールでは動作します

  • 'require File.expand_path('../../lib/MyRubyObject', __FILE__)' を config/environment.rb ファイルに入れます ('require File.expand_path('../application', __FILE__)' の後)。

  • 次に、コントローラー ファイルに require 'MyRubyObject' を配置するだけで、正常にインスタンス化できました: p = MyRubyObject.new ...

したがって、これは上記のリンクに基づいて WEBrick が誤った順序でロードすることに関連する問題であると推測しますが、サーバーを移動する可能性が最も高く、この問題が再び発生する可能性があるため、これに注目します。

これが他の人に役立つことを願っています! ありがとう

于 2013-06-17T08:40:35.410 に答える