1

両方ともRVMがインストールされている2つのバージョンのRubyでRails2.3.11アプリを実行しています。Rubyの両方のバージョンには、それぞれがまったく同じバージョンのまったく同じgemがあります。アプリケーションで不要なすべてのgemをアンインストールしました。

Ruby 1.8.7(RVM 1.8.7)ではすべてが正常に機能します。

Ruby1.9.2には2つのジェムセットがあります。RVM 1.9.2別のアプリのgemsetがあります。RVM 1.9.2@this_app以下にリストされている宝石があります。私が得るとRVM 1.9.2@this_app

Trace/BPT trap: 5

ログは、エラーが何であるかを示さずに停止します。宝石の互換性の問題はありますか?宝石のリストは次のとおりです。

actionmailer (2.3.11)
actionpack (2.3.11)
activerecord (2.3.11)
activeresource (2.3.11)
activesupport (2.3.11)
devise (1.0.10)
google4r-checkout (1.0.6.1)
i18n (0.6.0)
json (1.6.1)
liquid (2.2.2)
money (3.7.1)
mysql (2.8.1)
rack (1.1.2)
rails (2.3.11)
rake (0.9.2)
rmagick (2.13.1)
warden (0.10.7)

ご協力いただきありがとうございます。

4

3 に答える 3

1

これはインストールされているgemのリストであり、Gemfileにあるものではないようです。

ジェムとジェムセットをどのように管理していますか?あなたはバンドラーを使用しているようですが、それは良いことですが、ルビーとジェムセットのバージョンをどのように切り替えていますか?rvmまたはrbenvを使用していますか?Gemfileはありますか?

バンドラーを使用していない場合は、レール2.3.11を使用して使用できますが、少し手間がかかります。依存関係をより適切に管理できるように、これを強くお勧めします。

Gemfile次に、からできることをすべて取り除き、bundle install更新してから、もう一度実行してみます。

たとえば、cgi_multipart_eof_fix展開方法によっては、もう必要ないと思います。

god、、などの他のgemは、アプリ内では一般的に使用されておらず、密接に関連していない可能性がありますrubygems-updaterdoc

于 2012-10-16T17:14:31.287 に答える
1

だから私はあなたがアプリをうまく起動することさえできないと思いますruby ./script/serverか?最初のリクエストで起動してからクラッシュしませんか?

Rubyがクラッシュし始めたら、最初に確認するのは、バイナリ(純粋なRubyではない)gemを使用しているかどうかです。上記のリストを見るだけで、、、jsonおよびmysqlrmagickバイナリである可能性があると思います。Gemfileから一時的にコメントアウトします(アプリケーションコードの一部をコメントアウトする必要がある場合は、コメントアウトします)。でアプリを起動してみて、bundle exec ruby ./script/serverクラッシュするかどうかを確認してください。(Railsで必要になる可能性があると思いますjson。その場合、Railsを無効にすることはできません。)

純粋なRubygemのみを使用していて、Rubyがクラッシュしている場合は、インタープリター自体にバグが見つかっている可能性があります。それは怖いことではありません。もし私があなたなら、私は袖をまくり上げて、Cソースに飛び込み(からそれをクローンしgithub.com/ruby/rubyます)、そしてその感謝を直します!しかし、Cのスキルがない場合は、試してみたくないかもしれません。

インタープリターのデバッグを試みたい場合、最初に、クラッシュしているポイントを見つけることです。そのためには、スタートアップコード(application.rbboot.rbなどのputs "got to #{__FILE__}:#{__LINE__}"呼び出しを含む)を散らかして、クラッシュが発生している場所を正確に特定しようとします。必要に応じて、gemをクラックして開き、puts呼び出しを追加することもできます(ディレクトリに移動するだけです。 RVMはRubyコードを保持し、編集しません)。

クラッシュしているポイントを見つけたら、Cソースに移動して、クラッシュの原因となっているプラ​​ットフォームメソッドの実装を見つけたり、クラッシュを構築したりできます。内部で何が起こっているかについての詳細を取得するには、デバッグprintf呼び出しを追加し、。を使用してインタープリターを再コンパイルしmake && make installます。(CレベルからのメッセージはprintfRubyレベルと完全に正しい順序でインターリーブしていないように見えることに注意してくださいputs。)一時的にPATHを編集して、複製されたruby/binディレクトリに新しくコンパイルされたバイナリがシステムとして機能するようにしますruby

あなたが実際に問題を理解してRubyにパッチを提供することができれば、それはあなたにとってかなり良い自慢の権利を意味するでしょう!

于 2012-10-16T20:49:51.133 に答える
0

私自身の質問に答えるのは本当に好きではありませんが、まだ提供されていない完全な答えを見つけました。

問題の一部はrmagickの互換性でした。アプリでrmagickへの参照をコメントアウトしましたが、それでも同じエラーが発生していました。

最大の要因は、RVMがrubygems1.8.24をインストールすることでした。rubygems 1.6.xを超えるものは、rails2.3.xアプリでは機能しません。コマンド「rvmrubygems1.6.2」は、互換性のあるバージョンをインストールしました。

于 2012-10-17T05:48:50.993 に答える