🔖
ubuntuでsnapベースのrubyをインストールしてはまった
TL;DR
ubuntuでsnapベースのrubyをインストールしたけど、スクリプトの実行すらできない状況だった。
他経由(aptなど)でインストールしたrubyが悪さしてる可能性があるので、消すなりしましょう。
起きた現象
snapベースでインストールしたrubyでスクリプトを実行しようとすると下記のようなエラーが出て起動できなかった。
/snap/ruby/260/lib/ruby/3.1.0/rubygems.rb:1334:in `rescue in <top (required)>': undefined method `rubyforge_project=' for class `Gem::Specification' (NameError)
Loading the rubygems/defaults/operating_system.rb file caused an error. This file is owned by your OS, not by rubygems upstream. Please find out which OS package this file belongs to and follow the guidelines from your OS to report the problem and ask for help.
from /snap/ruby/260/lib/ruby/3.1.0/rubygems.rb:1321:in `<top (required)>'
from <internal:gem_prelude>:2:in `require'
from <internal:gem_prelude>:2:in `<internal:gem_prelude>'
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:50:in `<class:Specification>': undefined method `rubyforge_project=' for class `Gem::Specification' (NameError)
from /usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:49:in `<top (required)>'
from /snap/ruby/260/lib/ruby/3.1.0/rubygems.rb:1325:in `require'
from /snap/ruby/260/lib/ruby/3.1.0/rubygems.rb:1325:in `<top (required)>'
from <internal:gem_prelude>:2:in `require'
from <internal:gem_prelude>:2:in `<internal:gem_prelude>'
いろいろめんどくさいので、anyenv/rbenvで逃げてたところ、 @hsbt さんから
というアドバイスをもらったので、試したらうまくいった。
aptベースでインストールされたruby関連パッケージの探し方
下記コマンドを実行したらrubyはなかったけど、いくつかruby関連のパッケージがあった。
% apt list --installed |grep ruby
ruby-net-telnet/focal,now 0.1.1-2 all [installed,auto-removable]
ruby-power-assert/focal,now 1.1.7-1 all [installed,auto-removable]
ruby-test-unit/focal,now 3.3.5-1 all [installed,auto-removable]
ruby-xmlrpc/focal,now 0.3.0-2 all [installed,auto-removable]
rubygems-integration/focal,now 1.16 all [installed,auto-removable]
aptベースのパッケージのアンインストール方法
% sudo apt remove パッケージ名
おまけ
snapとは
snapはUbuntuのCanonical社が開発しているパッケージシステムで、Dockerベースでパッケージ構成することで、ディストリビューションの依存関係を少なくできるというのがウリ(だけど今回ハマった…)
rbenvとは
rbenvはrubyのバージョン管理システムで、複数バージョンのrubyを切り替えることができる。
anyenvとは
XXenvをさらにまとめたもので、下記のようなXXenvに対応している
% anyenv install -l
Renv
crenv
denv
erlenv
exenv
goenv
hsenv
jenv
jlenv
luaenv
nodenv
phpenv
plenv
pyenv
rbenv
sbtenv
scalaenv
swiftenv
tfenv
現場からの備忘録は以上です。それではまたー。
Discussion