2012-03-02 12 views
0

私はすべての宝石をあるマシン(foo)から別のマシン(bar)にコピーしたいと考えています。両方のマシンは同じですが、fooにはたくさんの宝石がインストールされていて、バーはありません(バーはインターネットに接続できません)。ruby​​ gemsコレクションをあるマシンから別のマシンに転送するためのベストプラクティス

私は/ usr/local/lib/ruby​​/gemsをfooからbarにコピーしました。これでbarはgemがインストールされていることを認識しました。

[email protected] # gem list 

*** LOCAL GEMS *** 

keybox (1.2.1) 
rake (0.9.2.2) 
... and so on 

は、私は、彼らが期待どおりに動作、彼らの本来の場所からそれらを実行しようとした場合

[email protected] # cd /usr/local/lib/ruby/gems/1.8/gems/keybox-1.2.1/bin 
[email protected] # ./keybox --version 
keybox: version 1.2.1 

彼らがfooであるように私は、共通のbinディレクトリの下にあるすべての宝石を持っていると思い

[email protected] # find /usr/local/lib/ruby/gems/1.8/gems/*/bin -type f | xargs -I baz ln -s baz /usr/local/bin/ 

予想通り、これがそうするためには/ usr/local/binに/

にそれぞれ宝石の場所からシンボリックリンクを作成します私の宝石(レーキのようなもの)はすべて期待どおりに動作し、他のもの(キーボックスなど)では動作しません。 gemディレクトリのスクリプトと/ usr/local/binの下にインストールされるスクリプトの違いがあります。

[email protected] # diff /usr/local/lib/ruby/gems/1.8/gems/keybox-1.2.1/bin/keybox /usr/local/bin/keybox 
1,4c1,7 
< #!/usr/bin/env ruby 
< ######################################################################## 
< # 
< ######################################################################## 
--- 
> #!/usr/local/bin/ruby18 
> # 
> # This file was generated by RubyGems. 
> # 
> # The application 'keybox' is installed as part of a gem, and 
> # this file is here to facilitate running it. 
> # 
6,17c9 
< #---------------------------------------------------------------------- 
< # bootstrap 
< #---------------------------------------------------------------------- 
< begin 
<  require 'keybox' 
<  require 'keybox/application/password_safe' 
< rescue LoadError 
<  path = File.expand_path(File.join(File.dirname(__FILE__),"..","lib")) 
<  raise if $:.include? path 
<  $: << path 
<  retry 
< end 
--- 
> require 'rubygems' 
19,21c11 
< #---------------------------------------------------------------------- 
< # instantiate the program and pass it the commandline parameters 
< #---------------------------------------------------------------------- 
---  
> version = ">= 0" 
23,24c13,16 
< keybox = Keybox::Application::PasswordSafe.new(ARGV) 
< keybox.run 
--- 
> if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then 
> version = $1 
> ARGV.shift 
> end 
25a18,19 
> gem 'keybox', version 
> load Gem.bin_path('keybox', 'keybox', version) 

私はすでに別のマシンから宝石をコピーしていますので、私は同じように簡単にだけでなく、公共のスクリプトをコピーすることもできますが、それを行うには、より「gemish」方法は何ですか?明らかにkeyboxの場合に行われたように、公開スクリプトを再生成するgemコマンドがありますか?

+0

なぜこれをやりたいですか? –

+0

私はバーサーバーに物理的にアクセスできますが、外部のインターネットにアクセスすることはできず、宝石サーバーもありません。私は続編の宝石(と他の宝石)を使用してバーにいくつかのプログラムを書いてみたいと思います。 – sonicpond

+0

シフトキーが壊れていると思います。それを修正したいかもしれません。 –

答えて

1

あなたはポートを介し宝石をインストールした場合、次のことが

  1. がローカルにインストールされたポートからパッケージを作成するpkg_info | grep rubygem | cut -d ' ' -f 1
  2. 使用「は、pkg_create -Rnb」のような、すべての宝石のリストを作成します動作するはずです(と必要依存関係)。
  3. 対象のマシンにパッケージをコピーしてください。
  4. pkg_addでインストールしてください。
1

次のコマンドを使用してみてください:

gem pristine --all 

(私はあなたがコピーしたと信じて)、キャッシュされたソースから宝石を再インストールされますので、スクリプトラッパーを再作成する必要があり、拡張を再コンパイルすること、など

また、check the documentationを使用して、必要に応じてコマンドを調整することもできます(実行可能ファイルを復元するフラグがあります)。

関連する問題