undefined class/module とか言われてアプリの起動ができなくなってしまう
このアプリの環境はRails-2.3.17、memcached、jpmobileなのですが、
あるコントローラを踏むとこんな状態になってしまって困っていました。
ArgumentError (undefined class/module Mail): Rendered rescues/_trace (34.9ms) Rendered rescues/_request_and_response (0.9ms) Rendering rescues/layout (internal_server_error) /!\ FAILSAFE /!\ Sat Feb 23 02:52:33 +0900 2013 Status: 500 Internal Server Error undefined class/module Mail /Users/fujioka/.rbenv/versions/ree-1.8.7-2012.02/gemsets/you-ok-gemset/gems/activesupport-2.3.17/lib/active_support/vendor/memcache-client-1.7.4/memcache.rb:211:in `load' /Users/fujioka/.rbenv/versions/ree-1.8.7-2012.02/gemsets/you-ok-gemset/gems/activesupport-2.3.17/lib/active_support/vendor/memcache-client-1.7.4/memcache.rb:211:in `get' /Users/fujioka/.rbenv/versions/ree-1.8.7-2012.02/gemsets/you-ok-gemset/gems/activesupport-2.3.17/lib/active_support/vendor/memcache-client-1.7.4/memcache.rb:828:in `with_server' /Users/fujioka/.rbenv/versions/ree-1.8.7-2012.02/gemsets/you-ok-gemset/gems/activesupport-2.3.17/lib/active_support/vendor/memcache-client-1.7.4/memcache.rb:207:in `get' /Users/fujioka/.rbenv/versions/ree-1.8.7-2012.02/gemsets/you-ok-gemset/gems/actionpack-2.3.17/lib/action_controller/session/mem_cache_store.rb:31:in `get_session' /Users/fujioka/rails/you-ok/vendor/plugins/jpmobile/lib/jpmobile/trans_sid.rb:16:in `load_session' /Users/fujioka/.rbenv/versions/ree-1.8.7-2012.02/gemsets/you-ok-gemset/gems/actionpack-2.3.17/lib/action_controller/session/abstract_store.rb:132:in `send' /Users/fujioka/.rbenv/versions/ree-1.8.7-2012.02/gemsets/you-ok-gemset/gems/actionpack-2.3.17/lib/action_controller/session/abstract_store.rb:132:in `load!' /Users/fujioka/.rbenv/versions/ree-1.8.7-2012.02/gemsets/you-ok-gemset/gems/actionpack-2.3.17/lib/action_controller/session/abstract_store.rb:187:in `send'
しかも、なぜ起こるのかさっぱりわからず。
ようやく昨日わかりました。それによると、
memcachedへのMarshalの不具合のようで、
セッションをmemcachedからMarshalロードするときに
Classの定義を見つけられないらしい。
https://github.com/mperham/dalli/issues/227
似たような状態の人がDalliにいました。
私の解決策は、config/environments/development.rbで
config.cache_classes = false
を
config.cache_classes = true
にするとうまくいくようになりました。
http://www.ruby-forum.com/topic/1497937
には私と全く同じ状況の人もいました。
なんかMarshalと相性が悪いんですね。