2017-12-06 10 views
-1

ローカルシステムから必要な宝石をロードできないときにルビースクリプトからルビーの宝石をインストールしようとしています。ここに私のコードです。'LoadError'が発生したときにレスキューブロックにルビーの宝石をインストールする

begin 
    require '<gem name here>' 
rescue LoadError 
    puts `gem install <gem name here>` 
    require '<gem name here>' 
end 

上記のコードは、rescueブロックに宝石をインストールします。しかし、それが宝石を必要とするとき、それはこのエラーを示します:

.rvm/rubies/ruby-2.4.2/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb 
:55:in require': cannot load such file -- <gem name here> (LoadError) 

これはどのように解決できますか?私は宝石がrescueブロックの中にロードされていて、システムにまだ存在しないようにしたい。

+0

冒頭に必要な宝石の完全なリストがわかりませんか? –

+1

あなたは文字通り '' ''をコードに書いていますか? – sawa

+0

@JagdeepSingh私は宝石の完全なリストを知っています。本番システムでは、このように記述すると、宝石の手動インストールは不要です。その目的のために私はこのようにしていました。 –

答えて

0

厳密な検索の後、私は答えを見つけました。 gemをインストールした後にGem.clear_pathsを使用すると、スクリプトで使用できるようになります。更新されたコードの合計:

begin 
require '<gem name here>' 
rescue LoadError 
    puts `gem install <gem name here>` 
    Gem.clear_paths 
    require '<gem name here>' 
end 
関連する問題