search
LoginSignup
14

More than 1 year has passed since last update.

posted at

updated at

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

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")

Rails6系でもそのまま適用できそう。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
14