プログラミング

【Rails】PostgreSQL12にしたらrails sで"panic"エラーが出て立ち上がらない問題の解決法

【Rails】PostgreSQL12にしたらrails sで"panic"エラーが出て立ち上がらない問題の解決法
つげお

ん?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という値が設定されているのが原因っぽいです。

参考サイト:https://stackoverflow.com/questions/58763542/pginvalidparametervalue-error-invalid-value-for-parameter-client-min-messag

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アプリがたくさんあるんですよね。

アップデートが追いつきません。

-プログラミング

Copyright© つげコード , 2020 All Rights Reserved.