2009年3月6日金曜日

Railsの原因不明のエラー解決!

昨日書いたRailsのエラーがやっと解決!

エラーのトレースに表示されていた、
/usr/local/profiling/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_s upport/dependencies.rb:422:in `remove_const'
の部分をデバッガでチェック。

parent.send :remove_const, names.last

という処理でこけている。
このとき parent = Object, names.last =
VERBOTEN_TAGS だったので、

Object.send :remove_const, VERBOTEN_TAGS

でこけていると。
VERBOTEN_TAGS という変数をクリアしようとしてこけているらしいので、
rubyのライブラリの中を
VERBOTEN_TAGS で全検索。

find ./ -type f -name "*.rb" | xargs grep VERBOTEN_TAGS

結果ヒットしたのは

./gems/1.8/gems/actionpack-1.13.3/lib/action_view/helpers/text_helper.rb

で、中でこういうこと↓をしている。

VERBOTEN_TAGS = %w(form script plaintext) unless defined?(VERBOTEN_TAGS)

んじゃアプリの中でこれを使っているクラスがあるかと検索すると、ありました1クラス。
しかもclass宣言の前にincludeしている。

include ActionView::Helpers::TextHelper
include ActionView::Helpers::TagHelper

class ContentSlot < ActiveRecord::Base
・・・
end

これだとグローバルな扱いになるので他に影響をあたえるっぽい。
ということで、includeをclass宣言の中に移動。

class ContentSlot < ActiveRecord::Base
  include ActionView::Helpers::TextHelper
  include ActionView::Helpers::TagHelper

  ・・・
end

これで動かしたところ、成功!
いやぁ~、長かった。3日ぐらいかかった気がする。

で、わかってみれば、そういえばあのTracに同じこと書いてあったな、と。。。

http://dev.rubyonrails.org/ticket/6716

ちょっと読んで自分のケースとは違う気がした&英語だったので途中であきらめたので
ちゃんと読んでいなかったんだけど、全く同じ対処が書いてあった。。。
ちゃんと読めてりゃ1日早く解決したかも。。。

まぁなんにしても解決すりゃよしということで。

0 件のコメント: