patorashのブログ

方向性はまだない

Mojaveでrailsを起動するとpgでセグメンテーション違反になる場合がある

開発マシンを新しいMBPに変えたと同時にMojaveになっていたのですが、そこで開発していると、時々Railsが全く起動しなくなりました。rails consoleとかは問題ないのですが、rails serverすると落ちる。しかもエラーメッセージがあまりにも長いので、標準エラー出力をファイルに出力して確認してみました。

$ bin/rails s 2> log/error.log

すると、以下のような結果に。

/Users/******/.anyenv/envs/rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/pg-1.1.4/lib/pg.rb:56: [BUG] Segmentation fault at 0x0000000104994a3a ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18]

-- Crash Report log information -------------------------------------------- See Crash Report log file under the one of following: * ~/Library/Logs/DiagnosticReports * /Library/Logs/DiagnosticReports for more details. Don't forget to include the above Crash Report log file in bug reports.

-- Control frame information ----------------------------------------------- c:0058 p:---- s:0433 e:000432 CFUNC :initialize c:0057 p:---- s:0430 e:000429 CFUNC :new c:0056 p:0016 s:0425 e:000424 METHOD /Users/toko/.anyenv/envs/rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/pg-1.1.4/lib/pg.rb:56 ...略

pgでSegmentation fault

pgでSegmentation faultが発生してます。解決法がわからず、ググってみると、pgを入れ直してみるのがよいとあったので、このエラーが発生するたびに入れ直してました。

bitbucket.org

とりあえず、入れ直すと動くようになりました。

$ bundle pristine pg

しかし、本当にpgのバグなんかなー…🤔自分の設定がどこかおかしいんじゃないか?と疑いつつも騙し騙しの運用をしてました。

pumaを疑う

そして、遂にpgを入れ直しても発生するようになってしまい、どうしたもんか?これは自分の環境だけのことなのか?と思い、周囲に聞いてみるも「その現象はまだ起きてない」と言われるので、再びググることに。rails consoleでは起きずにrails serverだけで起きるため、pumaとかが怪しいのでは?と薄々思っていたところで、そういう情報がヒット。

stackoverflow.com

worker数を複数にするのをやめたら起きないという情報が…。 puma.rbでworker数を指定するところを、developmentの場合は除外するようにしてみます。

workers ENV.fetch("WEB_CONCURRENCY") { 2 } unless Rails.env.development?

半信半疑でやってみたところ、確かに起きなくなりました。

解決?

ひとまず、これでMojaveで開発を継続できるようにはなったのですが、解決したわけではないし、むしろなぜworkerを複数起動するだけでこうなるのか?という疑問が残ります。プロセスをforkするタイミングでPostgreSQLへの接続がおかしくなるのだろうか?とりあえずこの件については時々調査してみようと思います。