🐈

[解決済] rails7でpry-byebugが動かなかった件

2022/03/27に公開

今回の問題

rails7にアップデートすると、binding.pryの動作がおかしくなった。
通常は以下のプロンプトで入力が見えるはずだが、見えないのである。

22:37:54 web.1  | 
[1] pry(#<**:**>)>

解決策

Foremanが導入されたことによりこの問題発生したため、Foremanをやめて起動スクリプトを書き換えた

diff --git a/entrypoint.local.sh b/entrypoint.local.sh
index 9346263..059fcfb 100644
--- a/entrypoint.local.sh
+++ b/entrypoint.local.sh
-bin/dev
+# https://github.com/evanw/esbuild/issues/1511
+yarn build --watch < /dev/zero &
+yarn build:css --watch &
+bundle exec pumactl start
  • entrypoint.local.shは、起動スクリプト

上記解決策に至った経緯

標準で使われているのでForemanやめたくなかったけど、いろいろ試行錯誤した結果やめざる負えなかったので経緯をする

Try1: $stdout.sync = true を使ってみる

マニュアルを見るとこの記述この記述があったので試してみたがだめでした。
バッファを無効にするだけなのでその通りといえばその通りだったかもしれません。

Try2: byebug server? につなげる

https://intrepidgeeks.com/tutorial/remote-debugging-using-foreman-and-byebug?fbclid=IwAR3A6bplIOLYM5AuNj3BRfj3nLyDfh4ExTW89DqHoflyPPbcYhLWh9NBZ3I

この記事を見つけていいかも!と思ってやってみましたが、byebugのした後に接続するとプロンプトが出てこないので採用しませんでした。

ちなみに接続方法は以下のような感じです。

$ bundle exec byebug -R localhost:8989

詳しく見ると上記の解決策はあるかもしれないですが、色分けもできなくなるので止めました。

Try3: pry-remoteを使おうとしてみる

pry-remoteを使えばTry2の減少を解決できるかなと思いましたが、issueが立っておりpry-remoteはまだつかえない?ようなので諦めました。

https://github.com/deivid-rodriguez/pry-byebug/issues/33

Try4: Foremanやめる

これが最終的に行き着いたところなのですが、

diff --git a/entrypoint.local.sh b/entrypoint.local.sh
index 9346263..059fcfb 100644
--- a/entrypoint.local.sh
+++ b/entrypoint.local.sh
-bin/dev
+yarn build --watch &
+yarn build:css --watch &
+bundle exec pumactl start

上記のようにすると、Cannot use import statement outside a moduleというエラーになりました。ビルド結果を見るとjsが作られてないようでIssueが立っていました。

解決方法はいろいろあったのですが、開発環境のみに起きていたので起動スクリプトの
yarn build時に< /dev/zeroをつけるようにしました。

この仕組みを使っているサービス

MarkdownやAsciidocで簡単にスライド作れるwebサービス

https://slidict.io

Discussion