2012-04-04 16 views
7

宝石(JSON)をクライアント側にインストールしたいのですが、まだインストールされていない場合のみ(1.9のRubyディストリビューションにはJSONがバンドルされています)。宝石をオンデマンドでインストールする

gem help installからそれを行う方法に関する手がかりを見つけることができませんでした。そして

ERROR: Error installing json: 
    The 'json' native gem requires installed build tools. 

に(JSONがバンドルされて)インストールのRuby 1.9とWindowsシステム上で結果gem install jsonを実行している - それは宝石がすでに存在するという事実を無視してそれををインストールしようとします。

クライアントがWindowsの可能性があるので、私はgem listの出力をgreppingのようなbashトリックはできません。

システムにすでに存在していない場合のみ、宝石をインストールするマルチプラットフォームの方法は何ですか?必要に応じて

答えて

2

これは...

begin 
    require "json" 
rescue LoadError 
    system("gem install json") 
end 

を働くかもしれない私の窓の上に、7システムをインストールする必要があります"、それを$ LOAD_PATHから削除することができます。

あるいは、1つのライナーとして置く:

ruby -e 'begin; require "some_gem"; rescue LoadError; system "gem install some_gem"; end' 
+0

偉大な、明日それをテストし、それが働く解決策であるようにあなたの答えを受け入れるでしょう。唯一の問題は、 'json'は2つの宝石、すなわちjson_pureとjsonだけで実際に提供できるということです。必要に応じて 'require 'json/ext''または' require' json/pure''を代わりに使います。 –

+0

うん。実際には、$ LOAD_PATHから手動でパスを削除する必要があるので、これは最善の方法ではないと私は考えています。 json/extまたはjson/pureが実際には含まれていない方が良いでしょう。 – Tomato

+0

コマンドラインからone-linerを実行しているので、何も削除する必要はありません。本当にありがとうございました! –

0
gem update json 

はあなたが「JSONを必要としない場合、それは

C:\Ruby193\bin>gem update json 
Updating installed gems 
Updating json 
Fetching: json-1.6.6.gem (100%) 
Temporarily enhancing PATH to include DevKit... 
Building native extensions. This could take a while... 
Successfully installed json-1.6.6 
Updating multi_json 
Fetching: multi_json-1.2.0.gem (100%) 
Successfully installed multi_json-1.2.0 
Gems updated: json, multi_json 
Installing ri documentation for json-1.6.6... 
Installing ri documentation for multi_json-1.2.0... 
Installing RDoc documentation for json-1.6.6... 
Installing RDoc documentation for multi_json-1.2.0... 

C:\Ruby193\bin>gem update json 
Updating installed gems 
Nothing to update 

C:\Ruby193\bin> 
+1

インストールされていないgem updateを実行しようとすると、失敗するでしょう。 –

+0

上記のスクリーンショットが私を正しく証明しています。初めてインストールした宝石はありませんでした。 – peter

2

宝石がインストールされているかどうか尋ねるために:

gem list --installed "^json$" 

をそれが必要なら宝石をインストールするには:

ruby -e '`gem list -i \"^json$\"`.chomp=="true" or `gem install json`' 

へコマンドラインスクリプトを作成します。

gem-install-fast json 
0

私が見つけた最高の本(シェルコマンド)である: は、コマンドラインスクリプトを使用するには $ gem install asciidoctor --conservative

それは宝石の仕様が現在インストールされている宝石でカバーすることができない場合にのみインストールされます。

関連する問題