Docker上のRailsアプリをVSCodeのデバッグを用いると、VSCodeのデバッグ行がハイライトされない
Contents
はじめに
今回は勉強のために、Docker 上に構築した(docker-compose 利用)Rails 6 のアプリケーションを vscode のリモートデバッグを用いてデバッグをしようとしました。 一見 BreakPoint にも停止してくれてうまく行ったと思ったのですが、
- 停止行がハイライトされない
- VARIAVLES で値が参照できていない
といった、上記画像のような問題が発生しました。私の調べ方が悪いのか、調べてもなかなか出てこなかったため備忘録としてメモしておきます。
TL;DR
原因は、remoteWorkspaceRoot のパスがずれていることです。
.vscode/lanch.json
のremoteWorkspaceRoot
を確認する。- コンテナ内のアプリケーション位置とパスを修正する(恐らくパスがずれているはず)。
詳しく
VS Code を用いてリモートデバッグを行う場合、プロジェクトフォルダ/.vscode/lanch.json
内に、リモートデバッグ用のコンフィグを記載していると思います。
そのコンフィグに記載している remoteWorkspaceRoot(リモート先のプロジェクトフォルダがある場所)が、実際の web サーバのコンテナ内で展開されているアプリケーションの場所とで、差異があるため起きる現象です。
検索上位に出てくるサイトを参考にして構築した場合、恐らくルート直下に保存しているはずなので、remoteWorkspaceRoot に "/myapp"
と記載します。
(myapp はコンテナ内で展開しているアプリケーションのフォルダ名)。
|
|
上記を実行後にデバッグを確認すれば、正しく表示されるはずです。
現状のコンテナがどうなっているのかがわからない場合
docker-compose ps
にて、コンテナが起動しているかを確認します。起動していない場合はdocker-compose up -d
で起動してからdocker-compose ps
で確認します。docker-compose config --service
で、Web サーバのコンテナ名を確認し、docker-compose exec web bash
(web は自身が設定した web サーバコンテナ名)を行います。- web サーバのコンテナ内に入れるので、自身のアプリケーションがどこにあるのかの確認をします(恐らくルート直下にあるので、
ls
コマンドを打てば見つかるはず)。
上記で確認を終えたら、remoteWorkspaceRoot の設定を行ってください。
さいごに
気づけば単純な問題でしたが、最初は原因に見当がつかず、結構悩んじゃいました。 気がつけたのは、web サーバの部分をローカルで動かしてみたからです。 ローカルでは正しく動いたので、恐らく VS Code - Container 間での問題と仮定してからはすぐでした。
原因調査は、ちゃんと切り分けてやっていったほうがやっぱ早く解決できますね。 にしても、どうして開発は環境構築で必ず詰まってしまうのだろうか……
参考
- VS Code の変数確認
- DebugHighlight が背景色とかぶっていないかを確認する
- Visual Studio Code の配色を好き勝手にカスタマイズした(settings.json) - Qiita
- DebugHighlight の指定:
"workbench.colorCustomizations":{"editor.stackFrameHighlightBackground":"#ffa5"}
- Debug 方法調査
- サービス名確認
- docker-compose を利用した、コンテナ内への侵入方法