VS codeの以下の拡張機能を導入したところ、エラーが出たので、その対応方法をメモしておきます。
事象および対応方法
エラー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を一度アンインストールし、再度インストールすると解消できました。
以上、本記事が少しでも参考になれば幸いです。
コメント