追記
Macの不具合が原因らしいことを突き止めたので色々やったら直ったぽいのでリンクを貼っておきます。
以下、元々の記事
開発マシンを新しい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を入れ直してみるのがよいとあったので、このエラーが発生するたびに入れ直してました。
https://bitbucket.org/ged/ruby-pg/issues/291/crashbitbucket.org
とりあえず、入れ直すと動くようになりました。
$ bundle pristine pg
しかし、本当にpgのバグなんかなー…🤔自分の設定がどこかおかしいんじゃないか?と疑いつつも騙し騙しの運用をしてました。
pumaを疑う
そして、遂にpgを入れ直しても発生するようになってしまい、どうしたもんか?これは自分の環境だけのことなのか?と思い、周囲に聞いてみるも「その現象はまだ起きてない」と言われるので、再びググることに。rails consoleでは起きずにrails serverだけで起きるため、pumaとかが怪しいのでは?と薄々思っていたところで、そういう情報がヒット。
worker数を複数にするのをやめたら起きないという情報が…。 puma.rbでworker数を指定するところを、developmentの場合は除外するようにしてみます。
workers ENV.fetch("WEB_CONCURRENCY") { 2 } unless Rails.env.development?
半信半疑でやってみたところ、確かに起きなくなりました。
解決?
ひとまず、これでMojaveで開発を継続できるようにはなったのですが、解決したわけではないし、むしろなぜworkerを複数起動するだけでこうなるのか?という疑問が残ります。プロセスをforkするタイミングでPostgreSQLへの接続がおかしくなるのだろうか?とりあえずこの件については時々調査してみようと思います。