2011-08-03 24 views
1

マイセットアップ:Railsの3.0.9、Rubyの1.9.2rescue_from NoMethodError

私は非ファイルフィールドに送られているコンテンツタイプを扱うHerokuの上で、このラックbugに走りました。特に私が得るエラーは

NoMethodError (undefined method `rewind' for "blah":String): 

です。 "blah"は私が通っているURLパラメータの値です。私はどのように私はNoMethodError巻き戻し方法のみをチェックします。この

application_controller.rb 

    rescue_from NoMethodError do |exception| 
    logger.debug "\n\n==============Rack rewind error=======================\n\n" 
    end 

ようなことをやって、このエラーを無視することは可能であるべきと思っていますか?あるいは、このRackメソッドを無効にする方法がありますか?

リバインドメソッドの呼び出しを制御することはできません。これはRack自体で処理されるため、tryを使用したり、エラーを修正することはできません。

答えて

3

可能であれば、私はそのエラーを修正しようとします。そうでない場合、私はあなたがrescue_from内から例外を再引き上げのRailsをすることができないと思いますが、あなたの代わりに、デフォルトのエラーハンドラを呼び出すことができます:私は同じ問題が、必要なPythonで書かれたクライアントアプリを持っていた

rescue_from NoMethodError do |exception| 
    if exception.name == :rewind 
    logger.debug "rewind error" 
    else 
    rescue_action_without_handler(exception) 
    end 
end 
+0

エラーを解決できません。これは、Rack自体の深い部分です。私はapplication_controller.rbで提案したようにエラーハンドラを追加しようとしましたが、これは決して起動しませんでした。おそらくRackはエラーを発生させませんか? – Bob

0

他のいくつかのファイル以外のパラメータとともにファイルをRailsのバックエンドにアップロードすることができます。ファイルオブジェクトのパラメータだけが正常に動作しましたが、Pythonクライアントが文字列paramsを送信したときにRailsはNoMethodError (undefined method 'rewind' for <String#F3433>):になりました。私はthis patchをjdelStrotherで適用して解決しました。

# elsif !filename && content_type 
# body.rewind 
# 
# # Generic multipart cases, not coming from a form 
# data = {:type => content_type, 
#   :name => name, :tempfile => body, :head => head} 

をして、それらを置き換えます:それはちょうど、以下のコメントをするために必要なモジュールRack::Utils::Multipart方法parse_multipart

else 
    data = body 
end 

。 config/initializersディレクトリのrubyファイルにパッチコードを追加するだけです。