過去に、こんな記事を書いていました。
ずっと騙し騙し、gemの再インストールをしながら使っていたのですが、いよいよresqueがまともに動かないときが頻発したので、ちゃんと調査を開始。
ちなみにこの記事を書いている時点での私のPCの環境は以下の通り。
環境 | バージョン |
---|---|
OS | Mac OS X Mojave(10.14.6) |
Ruby | 2.6.3(rbenvでインストール) |
PostgreSQL | 11.x(Dockerで起動) |
PostgreSQLとの接続を疑う
過去の経緯から、PostgreSQLの接続が怪しいのかなと思っていたら、こんなStack Overflowの投稿を発見。
回答から抜粋すると、以下のような設定(gssencmode: disable
)をdatabase.ymlのdevelopmentとtestに追加したらいい、とあった。
default: &default adapter: postgresql development: <<: *default gssencmode: disable test: <<: *default gssencmode: disable
これは、PostgreSQL 12から追加されたオプションらしい。OS Xだとこれの指定がないとエラーになることがあるとか…。
とりあえず設定はしておいたが、PostgreSQLへの接続はうまくいくときといかない時があったので、設定して様子見をしておく…。
Redisへの接続で落ちる
とりあえず、これで直ったんじゃないか?と思い、heroku local
コマンドでpumaとresqueを起動させたところ、ActiveJobの処理が動いたらセグメンテーション違反が発生。今度はエラーメッセージが変わった。
13:18:43 resque.1 | /Users/****/.anyenv/envs/rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/redis-4.1.3/lib/redis/connection/ruby.rb:210: [BUG] Segmentation fault at 0x000000010cb14a3a 13:18:43 resque.1 | ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin18] 13:18:43 resque.1 | -- Crash Report log information -------------------------------------------- 13:18:43 resque.1 | See Crash Report log file under the one of following: 13:18:43 resque.1 | * ~/Library/Logs/DiagnosticReports 13:18:43 resque.1 | * /Library/Logs/DiagnosticReports 13:18:43 resque.1 | for more details. 13:18:43 resque.1 | Don't forget to include the above Crash Report log file in bug reports. 13:18:43 resque.1 | -- Control frame information ----------------------------------------------- 13:18:43 resque.1 | c:0055 p:---- s:0289 e:000288 CFUNC :getaddrinfo 13:18:43 resque.1 | c:0054 p:0034 s:0281 e:000280 METHOD /Users/****/.anyenv/envs/rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/redis-4.1.3/lib/redis/connection/ruby.rb:210
今度はRedisに接続できなくなっている…。エラーメッセージでググったら、Rubyのバグレポートを発見。
Third Party Issueになっていて、RubyじゃなくてMacのgetaddrinfoのバグのせいらしいことを把握。
同様に色々検索してみたのだが、やはりOS Xのgetaddrinfo由来のバグである、というバグレポートがヒットする。
直す方法が掲示されていないのだが、RubyやGemをコンパイルする時点でバグっていそうだなと思った。
直すためにやったこと
brew upgrade
で、gccとかを更新すれば直るんじゃないか?と思い、雑にbrew upgrade
を実行。- Rubyを再インストールすれば直るんじゃないか?と思い、雑に
rbenv install -f 2.6.3
を実行(ここは任意のバージョンを) - gemを全て再インストールすれば(略)と思い、全てのgemを削除。gemを全削除するのはここを参考にした。 qiita.com
- bundle installを実行
動作確認
heroku local
でpumaとresqueを起動させて、ActiveJobの処理を動かしてみたところ、問題なく動いた。また、頻発していたpgのセグメンテーション違反も起きなくなったので、これで解決かもしれない…!!