1

Ruby on Rails アプリケーションに問題があります。未定義のメソッドに遭遇するたびに、大量のメモリを使用します。プロセスを強制終了するまでサーバーをフリーズします。エラーログは、次のような未定義のメソッドを指しています:

ActionView::Template::Error (#<#:0x007fb3d88de8c8> の未定義メソッド `testos'):

これを修正する方法または構成はありますか? Rails 3.2.2でruby 1.9.3を使用しています。

ここにスタックトレースがあります

53960 ミリ秒で 500 内部サーバー エラーを完了

ActionView::Template::Error ( _app_views_rules_index_html_erb_ 4146358986539966513_70205169705180 ' app/views/rules/index.html.erb:77: 内の未定義のメソッドブロックtestos' for #<#<Class:0x007fb3d43d0420>:0x007fb3d479c8d8>): 77: @rules["data"].each do |rule| 78: json_rule =ActiveSupport::JSON.decode(rule["json_rule"])
79: %>
80: <%=testos(1)%>
81: <div class="dvGridRow" style="width:100%;padding-bottom:10px;">
82: <div class="dvGridData" style="vertical-align:top;width:190px;margin-left:5px;">
83: <%= json_rule["rule_name"]%>
app/views/rules/index.html.erb:80:in

each'
app/views/rules/index.html.erb:77:in

レンダリングされた /Users/jay/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.2/lib/action_dispatch/middleware/templates/rescues/_trace.erb (6.4ms) キャッシュ: [GET /manage /users/jay/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.8ms) レンダリング / Rescues/layout 内の Users/jay/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.2/lib/action_dispatch/middleware/templates/rescues/template_error.erb (18.5ms)

注:コードがどこでマシンをフリーズさせ、そのエラーが原因であるかを把握しようとしているため、意図的に未確認のメソッドを呼び出しました。

ありがとう

4

1 に答える 1

0

問題 (および解決策)

あなたがRubyオブジェクトを扱っているとしましょう。また、あなたがこのオブジェクトに完全に精通しているわけではないとしましょう。また、オブジェクトに存在しないメソッドを呼び出したとしましょう。

o = Object.new  
o.some_method  

NoMethodError: 未定義のメソッド `some_method' #

これはあまり望ましいことではありませんが、Ruby には、この状況から抜け出すための優れた方法があります。これをチェックしてください:

class OurClass  
  def method_missing (method_name)  
    puts "there's no method called '#{method_name}'"  
  end  
end  
o = OurClass.new  
o.some_method 

=> 「some_method」というメソッドはありません

クラスに method_missing というメソッドを作成できます。メソッドを呼び出しているオブジェクトがメソッドを持っていない (そして別のクラスやモジュールからメソッドを継承していない) 場合、Ruby は何か役に立つことをするチャンスをもう一度与えてくれます: クラスに method_missing メソッドがある場合、メソッド cal に関する情報を method_missing に渡し、混乱を整理します。それは素晴らしいことです。エラー メッセージは表示されなくなりました。

このリンクからの参照 http://net.tutsplus.com/tutorials/ruby/ruby-for-newbies-missing-methods/

于 2012-10-09T09:12:21.967 に答える