VSCode Ruby-LSP Rails で database connection エラーが発生する場合の解決方法
はじめに
VSCodeのRuby-LSPはコードジャンプやフォーマットなど、VSCodeでのRuby開発効率をあげるのに非常に強力なツールです。
この記事では、VSCodeでRuby-LSP Rails add-onを使用した際、以下のエラーが発生する問題の解決方法を紹介します。
Request model failed because database connection was not established
このエラーが発生すると、一部のケースでRuby-LSPが処理中にハングし、コードジャンプなどの機能が利用できなくなります。
なお、Ruby-LSP Rails add-onはRuby-LSPにデフォルトで組み込まれています。
エラーの確認方法
処理がハングした際に、VSCodeの出力タブからエラーを確認することができます。
ログの確認方法:
- コマンドパレットを開く (
Cmd+Shift+P
またはCtrl+Shift+P
)。 - 「Output: Focus on Output View」を選択。
- 出力パネルで「Ruby-LSP」を選択してログを確認。
エラーの原因
このエラーは以下の箇所でDB接続に失敗した際に、ログにメッセージが出力されていることがわかりました。
Ruby-LSP RailsはRailsアプリケーションを内部で起動しており、その際にプロジェクト内のconfig/database.yaml
を参照してDBに接続します。
問題の詳細
私たちの環境では、Docker ComposeでRailsとDBを動かしており、データベースのホスト名にDockerサービス名(例: db
)を指定していました。
しかし、このホスト名はDockerのコンテナ内でのみ有効であり、VSCodeのRuby-LSPが動作するホストマシンからは参照できないため、接続が失敗していました。
解決方法
対策として以下を実施しました。
-
config/database.yaml
のデフォルトホスト名を、ホストマシンから直接アクセスできるホスト名(localhost
または127.0.0.1
)に設定します。 - コンテナ内からアクセスする場合は環境変数
DB_HOST
を使用します。
設定の例:
development:
host: <%= ENV.fetch("DB_HOST") { "127.0.0.1" } %>
この設定変更により、Ruby-LSP Railsは正常にデータベースへ接続できるようになり、エラーが解消されました。
まとめ
VSCodeでRuby-LSP Railsを利用する場合、ホストマシンからデータベースにアクセスできる設定を行いましょう。また、Ruby-LSP Railsでは.env
ファイルは読み込まれないため、必ずdatabase.yaml
で明示的に設定する必要があります。
Discussion