Rubyスクリプト内でインストールしたGemを使用する
インストール直後はロードできない
Rubyスクリプト内でGemをインストールして直後にロードしようとしてもLoadErrorになる。(system で gem install を呼ぶ例。Rake の sh でも同様。)
system("gem", "install", "--no-document", "bundler")
require "bundler"
# => in `require': cannot load such file -- bundler (LoadError)
読み込みパスをクリアするとロードできるようになる
Gem.clear_pathsで読み込みパスをクリアするとロードできるようになる。
begin
require "bundler"
rescue LoadError
system("gem", "install", "--no-document", "bundler") or raise
Gem.clear_paths
retry
end
バージョンを指定することもできる
gemメソッドを使用すればバージョンも指定してロードできる。
begin
gem "bundler", "2.4.5"
rescue Gem::MissingSpecError
system("gem", "install", "--no-document", "bundler", "-v", "2.4.5") or raise
Gem.clear_paths
retry
end