config/database.ymlを直接読み込むと"pool"=>"<%= ENV.fetch(\"RAILS_MAX_THREADS\") { 5 } %>"
という謎の情報が取得され、正しいデータベースへの接続情報が得られません。
<%=
と%>
はeRubyスクリプトです。
Railsアプリケーションなdatabase.ymlは厳密にはeRubyスクリプトです。
正しいデータベースへの接続情報を得るには、YAMLファイルとして読み込むまえに、eRubyスクリプトとして実行する必要があります。
次のイメージです。
~ irb -r 'erb' -r 'yaml' irb(main):001:0> YAML.load ERB.new(File.read('config/database.yml')).result => {"default"=>{"adapter"=>"sqlite3", "pool"=>5, "timeout"=>5000}, "development"=>{"adapter"=>"sqlite3", "pool"=>5, "timeout"=>5000, "database"=>"db/development.sqlite3"}, "test"=>{"adapter"=>"sqlite3", "pool"=>5, "timeout"=>5000, "database"=>"db/test.sqlite3"}, "production"=>{"adapter"=>"sqlite3", "pool"=>5, "timeout"=>5000, "database"=>"db/production.sqlite3"}}
次のスクリプトを書きます。
require 'erb' require 'yaml' require 'active_record' ActiveRecord::Base.establish_connection YAML.load(ERB.new(File.read('config/database.yml')).result)['development'] class Computer < ActiveRecord::Base; end Computer.columns.each do |c| printf "%20s %10s \n", c.name, c.type end
実行してみます。
~ time ruby computer_columns.rb id integer user_name string maker string memory string release_year integer created_at datetime updated_at datetime ________________________________________________________ Executed in 666.37 millis fish external usr time 523.43 millis 127.00 micros 523.31 millis sys time 131.81 millis 673.00 micros 131.14 millis
実行時間1秒以下で、Railsアプリケーションのカラム情報が取得できました。