環境
- VSCode v1.40.1
- (extension) Ruby 1.1.2
- (extension) Ruby-Solargraph 0.21.1
- Ruby 2.5.1
- rbenv 1.1.2
- Rails 5.2.2.1
状況
普段はGoを書いているのですが、急遽別案件でrailsを書くことになり、VSCodeで開発環境を構築しようとしました。
補完のために「Ruby-Solargraph」というVSCodeの拡張を入れたところ、
/Users/me/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems/dependency.rb:312:in `to_specs': Could not find 'bundler' (1.16.3) required by your /Users/me/proj/Gemfile.lock. (Gem::MissingSpecVersionError)
To update to the lastest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:1.16.3`
Checked in 'GEM_PATH=/Users/me/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems:/Users/me/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0', execute `gem env` for more information
このようなエラーが発生しました。
調査
参加したプロジェクト自体、結構古いbundlerでgem管理がなされていました。
...
BUNDLED WITH
1.16.3
念の為bundlerのバージョンを確認すると、指定されているbundlerはインストールされているようでした。
$ bundler -v
Bundler version 1.16.3
このプロジェクトから出て、Ruby-Solargraphを導入した際にインストールされたsolargraphを動かしてみると、
$ cd ..
$ solargraph -v
0.37.2
問題なく動きました。
rubygems.orgで、solargraphの依存を確認すると、インストールされたsolargraph(v0.37.2)は、bundlerのv1.17.2以上を要求していました。
対応
対応策は、いくつか考えられます。
本質的には同じで、使っているbundlerで動くsolargraphを入れる、ということになります。
- Projectでsolargraphを管理する。
- solargraphのバージョンを下げる。
1.Projectでsolargraphを管理する場合
Gemfileにsolargraphを追加します。
...
group :development do
...
gem 'solargraph'
end
bundlerでインストールします。
$ bundle install
VSCodeで使用するbundlerを、プロジェクトのものに切り替えます。
{
...
"solargraph.useBundler": true,
...
}
これでVSCodeを再起動すると動きました。
2.systemで使うsolargraphのバージョンを下げる
調べると、solargraphのv0.31.2以降では、bundler(=> v1.17.2)を要求していました。
そこで、システムにv0.31.2のsolargraphをインストールします。
$ gem install solargraph -v 0.31.2
これでVSCodeを再起動すると、無事Language serverが起動しました。
まとめ
globalを汚すのに抵抗がある場合は「1」を、
自分しか使わないgemをprojectに管理させるのに抵抗がある場合は「2」を行うのが良いかと思います。
私の場合は、他がruby mineを使っている方々だった(&rubyは滅多に使わない)ので「2」で対応しました。
本当は、うまいこと、システムのsolargraphを動かすときにだけbundlerの依存関係チェックをすり抜けるようにできたらよかったのですが...
同じ症状でお困りの方の参考になれば幸いです。