Help us understand the problem. What is going on with this article?

Railsで ActiveRecord::ConnectionNotEstablished: No connection pool with 'primary' found. がでたら確認すること。

More than 1 year has passed since last update.

RailsのDBまわりではまった。Modelで以下のようなエラーがでる。

ActiveRecord::Baseを継承したMyAppModelでDBアクセスを試みると以下のようなエラーがでた。

ActiveRecord::ConnectionNotEstablished: No connection pool with 'primary' found.

「コネクションプールにコネクションがない」 というメッセージだけ。
そもそも接続情報があっているのかっていうあたりのメッセージがないので、詳細な状況がわからない。
RailsConsoleでいろいろやって調べられそうだったのでそうした。

$ ./bin/rails c

コンソールを開いてDBにちゃんとつながっているか確認する。
コネクションまわりは基底の ActiveRecord::Base でやってたはずだよね、という朧気な記憶から探っていく。

# なんかそれらしいメソッドがないか探す
pry(main)> ActiveRecord::Base.methods.grep(/conn/)
=> (省略)

# それらしいメソッドがあったので確認
pry(main)> ActiveRecord::Base.connected?
=> nil

# つながっていない
# 次にconfigがどうなってるか確認したい
# Rails.configuration から取得できるらしい
pry(main)> Rails.configuration.instance_values.grep(/database/i)
=> []
pry(main)> Rails.configuration.methods.grep(/database/i)
=> [:database_configuration]

# こちらにもそれらしいメソッドがある
pry(main)> Rails.configuration.database_configuration[ENV['RAILS_ENV']]
=> {"adapter"=>"postgresql", "encoding"=>"utf8", "pool"=>5, "database"=>"app_dev", "username"=>"usr_dev", "host"=>"localhost"}


# 設定はちゃんと読み込まれているので、明示的にコネクションを作成する
pry(main)> ActiveRecord::Base.establish_connection(
pry(main)*   Rails.configuration.database_configuration[ENV['RAILS_ENV']]
pry(main)* )
=> 省略

# 改めて接続確認
pry(main)> ActiveRecord::Base.connected?
=> true

ということで、ちゃんとDBに接続できた。

原因

ActiveRecordを使わない設定でApplicationが作られていて config/application.rbで無効化されていたため。

require_relative "boot"

require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
# require "active_job/railtie"
# require "active_record/railtie"
require "active_storage/engine"

# 以下略

require active_record/railtie をコメントアウトしているので無効の状態になっていた。このコメントを外すことでActiveRecordが使えるようになる。

バージョン情報

pry(main)> Rails.version
=> "5.2.0"
pry(main)> ActiveRecord.version
=> Gem::Version.new("5.2.0")
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away