私はすべての宝石をあるマシン(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コマンドがありますか?
なぜこれをやりたいですか? –
私はバーサーバーに物理的にアクセスできますが、外部のインターネットにアクセスすることはできず、宝石サーバーもありません。私は続編の宝石(と他の宝石)を使用してバーにいくつかのプログラムを書いてみたいと思います。 – sonicpond
シフトキーが壊れていると思います。それを修正したいかもしれません。 –