読者です 読者をやめる 読者になる 読者になる

ActiveRecord::ConnectionNotEstablishedのエラーについて

Rails3.1以降でActiveRecordを使用していないアプリを
herokuへディプロイした場合、発生するエラー
ActiveRecord::ConnectionNotEstablished」の解決方法について、
ちょっとだけハマったので書いておきます。

ローカルの環境では問題が無く動いているので、原因が分からなかったのですが、
下記英語のサイトが助けてくれました。
http://www.benjaminoakes.com/2011/09/15/activerecordconnectionnotestablished-in-rails-3-1-on-heroku/

解決方法として複数上げてくれているのですが、個人的には
以下の流れで試してみました。

(1)spec/spec_helper.rbの修正

  # If you're not using ActiveRecord, or you'd prefer not to run each of your
  # examples within a transaction, comment the following line or assign false
  # instead of true.
  config.use_transactional_fixtures = true

コメントには、ActiveRecordを使用していないのであれば、
この設定をコメントにするか、trueをfalseでセットしなさいとある。
で、コメントもfalseもどちらも試してみたのですが、
エラーは回避せず。。

そこで
(2)config/application.rbの修正

  # Pick the frameworks you want:
  require "active_record/railtie"
  require "action_controller/railtie"
  require "action_mailer/railtie"
  require "active_resource/railtie"
  require "sprockets/railtie"
  # require "rails/test_unit/railtie"

「require "active_record/railtie"」を下記のようにコメント化。

  # Pick the frameworks you want:
  # require "active_record/railtie"
  require "action_controller/railtie"
  require "action_mailer/railtie"
  require "active_resource/railtie"
  require "sprockets/railtie"
  # require "rails/test_unit/railtie"

再度、herokuへディプロイ。動作確認。。。
無事に動きました!

結論から言うと(2)config/application.rbの修正を実施すれば良いかと思います。
ActiveRecordを使用しないアプリも多々あるでしょうから、
覚えておいて損は無いと思います。

※2012/02/12追記
どうやら、(2)config/application.rbに
「require 'rails/all'」の一文が追加になっているアプリもあるようです。
その場合、ここが邪魔することもあるようなので、私の場合、
コメント化してます。そうするとエラーが発生しなくなります。