ん?Posgreのバージョンを12にあげたら古いプロジェクトが立ち上がらなくなった?
rails4以降のものは動くのに、rails3のものはダメだ!なんだこれ!
実際に業務でこんなことがあったので、忘れないように対応策をメモしておきます。
同様のエラーで苦しんでいる人の助けになれば幸いです。
エラーの詳細と症状
弊社ではPostgreSQLを使って開発しているのですが、ずっとバージョン9のまま使っていました。
ところが、新しいプロジェクトでPosgreの11以降をインストールしないといけないことになり、最新のバージョン12にアップデートしました。
すると、railsのバージョンが3以下のプロジェクトで「rails s」をすると
/Users/ユーザ名/任意フォルダ/プロジェクトフォルダ/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.15/lib/active_record/connection_adapters/postgresql_adapter.rb:650:in `exec': PG::InvalidParameterValue: ERROR: invalid value for parameter "client_min_messages": "panic" (ActiveRecord::StatementInvalid)HINT: Available values: debug5, debug4, debug3, debug2, debug1, log, notice, warning, error.
※エラー内のフォルダ名はサンプル用に日本語変換しています
こんなエラーが表示され、ローカルサーバーが立ち上がりません。
エラーが起きた原因
エラー文をよく見ると、HINT(ヒント)がありますね。
HINT: Available values: debug5, debug4, debug3, debug2, debug1, log, notice, warning, error.
使用できる値は以下のいずれかですよ。という意味ですね。
- debug5
- debug4
- debug3
- debug2
- debug1
- log
- notice
- warning
- error
それなのに、どこかでpanicという値が設定されているのが原因っぽいです。
To make it work with PostgreSQL version 12, I monkey patched PostgreSQLAdapter class to replace 'panic' with 'warning' message. Note, if you can upgrade activerecord gem to 4.2.6 or higher versions you don't need to have this monkey patch. I had to do this because my project depends on gem
activerecord-3.2.22.5
【和訳】これをPostgreSQLバージョン12で動作させるために、PostgreSQLのAdapterクラスにパッチを適用し、「panic」を「warning」メッセージに置き換えました。なお、activerecord gemを4.2.6以降のバージョンにアップグレードできる場合は、このモンキーパッチは必要ありません。私のプロジェクトはgem activerecord-3.2.22.5に依存しているため、これを行う必要がありました。
https://stackoverflow.com/questions/58763542/pginvalidparametervalue-error-invalid-value-for-parameter-client-min-messag
エラーの解消法
実際に「panic」と記載のある箇所を「warning」に書き換えてしまいましょう。
エラー文にどこが悪いのかしっかり記載があります。
/Users/ユーザ名/任意フォルダ/プロジェクトフォルダ/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.15/lib/active_record/connection_adapters/postgresql_adapter.rb:650:in `exec': PG::InvalidParameterValue: ERROR: invalid value for parameter "client_min_messages": "panic" (ActiveRecord::StatementInvalid)HINT: Available values: debug5, debug4, debug3, debug2, debug1, log, notice, warning, error.
※エラー内のフォルダ名はサンプル用に日本語変換しています
赤字にした場所にあるファイルの650行目に当該の「panic」がいるというのが分かります。
atomやvscodeなどのエディタで書き換えても良いですが、そのままコンソール上でviを使って書き換えると楽ちんです。
まずは問題のファイルがあるディレクトリに移動します。
cd /Users/ユーザ名/任意フォルダ/プロジェクトフォルダ/vendor/bundle/ruby/2.0.0/gems/activerecord-3.2.15/lib/active_record/connection_adapters/
次に問題のファイルをviで開きます。
vi postgresql_adapter.rb
viが起動したら、/panicと入れてエンターを押すと、panicを検索してくれます。
検索にヒットしたら、「i」を押してインサートモードにし、panicをwarningに書き換えます。
その後、escキーを押してビジュアルモードに戻したら、「:wq」を入れてエンターを押すと保存して閉じることができます。
これでrails sを試すと…
やったー!無事に立ち上がったー!
rails3なんて使ってんじゃねーよ!と言われればそれまでですが、小さい会社なのでまだまだ古いrailsアプリがたくさんあるんですよね。
アップデートが追いつきません。