give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

Herokuデプロイ時に`method_missing': undefined method `create_reflection'エラーが出る場合

2013.05.24 更新

長い格闘の末、このエラーはroutes.rbでdevise_forを呼ぶ前にactive_record/baseを強制的にrequireすることで発生しなくなりました。

# config/routes.rb
require 'active_record/base' # この行を追加
devise_for :users

今まで4〜5回ぐらいデプロイしましたが、一度も再発していないので、おそらく効果が出ていると思います。

根本原因は最後までわからなかったので、アドホック対応です。んぐぐ。


2013.05.21 更新

また再発してしまいました。
なので、原因と対策は間違っていたようです。
どうもすいません。。。


よく分からないエラーに遭遇して困ったのでメモしておきます。

エラーの内容

Herokuにデプロイすると、以下のようなエラーが出て「H10 App crashed」エラーが出る。

app/web.1:  /app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.12/lib/active_record/dynamic_matchers.rb:55:in `method_missing': undefined method `create_reflection' for #<Class:0x00000003022238> (NoMethodError) 

原因

Deviseが悪さをしてるっぽい?

app/web.1:  	from /app/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.12/lib/active_support/dependencies.rb:588:in `constantize' 
app/web.1:  	from /app/vendor/bundle/ruby/1.9.1/gems/devise-2.2.3/lib/devise.rb:267:in `get' 
app/web.1:  	from /app/vendor/bundle/ruby/1.9.1/gems/devise-2.2.3/lib/devise/mapping.rb:77:in `to' 
app/web.1:  	from /app/vendor/bundle/ruby/1.9.1/gems/devise-2.2.3/lib/devise/mapping.rb:72:in `modules' 
app/web.1:  	from /app/vendor/bundle/ruby/1.9.1/gems/devise-2.2.3/lib/devise/mapping.rb:89:in `routes' 
app/web.1:  	from /app/vendor/bundle/ruby/1.9.1/gems/devise-2.2.3/lib/devise/mapping.rb:156:in `default_used_route' 
app/web.1:  	from /app/vendor/bundle/ruby/1.9.1/gems/devise-2.2.3/lib/devise/mapping.rb:66:in `initialize' 
app/web.1:  	from /app/vendor/bundle/ruby/1.9.1/gems/devise-2.2.3/lib/devise.rb:301:in `new' 
app/web.1:  	from /app/vendor/bundle/ruby/1.9.1/gems/devise-2.2.3/lib/devise.rb:301:in `add_mapping' 
app/web.1:  	from /app/vendor/bundle/ruby/1.9.1/gems/devise-2.2.3/lib/devise/rails/routes.rb:208:in `block in devise_for' 
app/web.1:  	from /app/vendor/bundle/ruby/1.9.1/gems/devise-2.2.3/lib/devise/rails/routes.rb:207:in `each' 
app/web.1:  	from /app/vendor/bundle/ruby/1.9.1/gems/devise-2.2.3/lib/devise/rails/routes.rb:207:in `devise_for' 
app/web.1:  	from /app/config/routes.rb:21:in `block in <top (required)>' 

対処方法

Deviseを最新版にしたら直った。

$ bundle update devise # 2.2.3 => 2.2.4

 

同じようなエラーに遭遇した人は参考にしてみてください〜。
参考にしないで (><)