わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

数か月ぶりのスクリプト実行,DB関連を修正

いくつかのRubyスクリプトを数か月ぶりに動かしてみました.実行するのは2台のLinuxサーバです.その間,Rubyのバージョンは2.3.0-devから2.5.0-devに上げています(rbenv使用).
さて,データベースアクセスを伴う,あるスクリプト(your_script.rb)を実行すると,エラーが出ました.

Traceback (most recent call last):
1: from your_script.rb:22:in `

'
/.../.rbenv/versions/2.5.0-dev/lib/ruby/gems/2.5.0/gems/activerecord-5.1.4/lib/active_record/migration.rb:525:in `inherited': Directly inheriting from ActiveRecord::Migration is not supported. Please specify the Rails release the migration was written for: (StandardError)

class MyMigration < ActiveRecord::Migration[4.2]

「your_script.rb:22」と表示されているので,該当行を見ると,「class MyMigration < ActiveRecord::Migration」となっていました.Webで少し情報収集し,結局,エラーメッセージの最終行のとおり,「class MyMigration < ActiveRecord::Migration[4.2]」と書き換えました.
実行し直すと,メッセージが変わりました.またもエラーです.

Traceback (most recent call last):
5: from your_script.rb:160:in `

'
4: from your_script.rb:11:in `connect_db'
3: from /.../.rbenv/versions/2.5.0-dev/lib/ruby/gems/2.5.0/gems/activerecord-5.1.4/lib/active_record/connection_handling.rb:58:in `establish_connection'
2: from /.../.rbenv/versions/2.5.0-dev/lib/ruby/gems/2.5.0/gems/activerecord-5.1.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:880:in `establish_connection'
1: from /.../.rbenv/versions/2.5.0-dev/lib/ruby/gems/2.5.0/gems/activerecord-5.1.4/lib/active_record/connection_adapters/connection_specification.rb:185:in `spec'
/.../.rbenv/versions/2.5.0-dev/lib/ruby/gems/2.5.0/gems/activerecord-5.1.4/lib/active_record/connection_adapters/connection_specification.rb:188:in `rescue in spec': Specified 'postgresql' for database adapter, but the gem is not loaded. Add `gem 'pg'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord). (Gem::LoadError)

最後の文の「Add `gem 'pg'` to your Gemfile」が,問題解決の肝心なところと理解しつつも,実際のところGemfileを使用していません.
とりあえず,gem listを実行して,activerecordと,データベース接続に使用するライブラリ(pg)を見てみると,「activerecord (5.1.4)」と,「pg (1.0.0, 0.21.0)」と出ました.https://rubygems.org/gems/pgにアクセスしたところ,バージョン1.0.0がリリースされたのはつい最近(January 10, 2018)となっています.
最新のpgを,これまた最新のactiverecordでは受け付けてくれないらしいと判断し,Rubyスクリプト(your_script.rb)内で,pgの古いバージョンを指定することにしました.

gem "pg", "0.21.0"
require "pg"
require "active_record"

再度実行すると,エラーが消え,期待する動作となりました.