[VS Code] Ruby Sorbet、Ruby LSP導入時のエラー対応

Ruby

VS codeの以下の拡張機能を導入したところ、エラーが出たので、その対応方法をメモしておきます。

  1. Ruby Sorbet
  2. Ruby LSP

事象および対応方法

エラー1

上記1,2のVS Code拡張機能をインストールしたところ、以下のエラーが発生しました。

エラー1

2023-12-06T04:39:10.897Z [info] Running Sorbet LSP.
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe': Could not find 'bundler' (2.4.22) required by your /Users/abc/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:2.4.22`
	from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems.rb:302:in `activate_bin_path'
	from /usr/bin/bundle:23:in `<main>'
[Error - 13:39:10] Connection to server got closed. Server will not be restarted.

私はrbenvを使って複数のrubyバージョンをインストールしているのですが、terminalが使っているrubyバージョン(Sorbet gemがインストールされているrubyバージョン)とは異なるバージョンでVS Codeがlanguage serverを起動しようとしているようです。

以下のissueでも同様の問題が議論されています:

VSCode extension fails to start with "Sorbet metrics gathering disabled: Error: command 'sorbet.metrics.getExportedApi' not found" · Issue #5736 · sorbet/sorbet
Input Installed sorbet on the project Successfully ran srb init on the project. srb tc passes with no errors Installed t...

私の場合、以下のようにterminalからVS Codeを起動すると上記エラー1を解消できました。

code .

terminalからVS Codeを起動すると、環境変数を読み込んだ状態でVS Codeを起動できるらしく、その関係で解消できたのかも?と推測しています。

エラー2

エラー1が解決できましたが、今度は以下のエラー2に遭遇しました。ruby-lsp gem関連のエラーの模様です。

エラー2

2023-12-06 17:10:34.971 [info] Trying to activate Ruby environment with command: /bin/zsh -ic 'rbenv exec ruby -rjson -e "STDERR.printf(%{RUBY_ENV_ACTIVATE%sRUBY_ENV_ACTIVATE}, JSON.dump({ env: ENV.to_h, ruby_version: RUBY_VERSION, yjit: defined?(RubyVM::YJIT) }))"' inside directory: /Users/ユーザー名/abc
2023-12-06 17:10:37.046 [error] Failed to update global ruby-lsp gem: Error: Command failed: gem update ruby-lsp
ERROR:  While executing gem ... (NoMethodError)
    undefined method `httpdate' for 2023-10-19 10:13:23.294691693 +0900:Time

      request.add_field "If-Modified-Since", @last_modified.httpdate
                                                           ^^^^^^^^^
	/Users/ユーザー名/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/request.rb:149:in `fetch'
...


2023-12-06 17:10:37.316 [info] Ruby LSP> Skipping custom bundle setup since /Users/ユーザー名/abc/.ruby-lsp/Gemfile.lock already exists and is up to date

2023-12-06 17:10:37.338 [info] /Users/ユーザー名/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/ruby-lsp-0.12.5/lib/ruby_lsp/setup_bundler.rb:228:in `should_bundle_update?': undefined method `parse' for Time:Class (NoMethodError)

      !@last_updated_path.exist? || Time.parse(@last_updated_path.read) < (Time.now - FOUR_HOURS)
                                        ^^^^^^
	from /Users/ユーザー名/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/sorbet-runtime-0.5.11142/lib/types/private/methods/call_validation.rb:256:in `bind_call'
...


2023-12-06 17:10:37.341 [info] [Error - 17:10:37] Server initialization failed.
2023-12-06 17:10:37.341 [info]   Message: Pending response rejected since connection got disposed
  Code: -32097
2023-12-06 17:10:37.341 [info] [Info  - 17:10:37] Connection to server got closed. Server will restart.
2023-12-06 17:10:37.341 [info] true
2023-12-06 17:10:37.341 [info] [Error - 17:10:37] Ruby LSP client: couldn't create connection to server.
...

このエラーに関しては、rbenvを一度アンインストールし、再度インストールすると解消できました。

以上、本記事が少しでも参考になれば幸いです。

プロフィール
この記事を書いた人

30代半ばで未経験でプログラマーに転職し、日々奮闘中です
プログラミング、AI、NLP、キャリア関連などで少しでも役に立てる情報を発信していきます

ユウをフォローする
Ruby
ユウをフォローする

コメント

タイトルとURLをコピーしました