лучшие практики по переносу коллекции рубиновых камней с одного компьютера на другой - PullRequest
0 голосов
/ 02 марта 2012

Я хочу скопировать все мои драгоценные камни с одной машины (foo) на другую (bar).обе машины идентичны, за исключением того, что в foo установлена ​​куча драгоценных камней, а в bar нет (bar не может войти в интернет).

Я скопировал / usr / local / lib / ruby ​​/ gems из foo в bar, и теперь bar распознает, что гемы установлены.

root@bar # gem list

*** LOCAL GEMS ***

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

если я попытаюсь запустить их из их исходного местоположения, они будут работать как положено

root@bar # cd /usr/local/lib/ruby/gems/1.8/gems/keybox-1.2.1/bin
root@bar # ./keybox --version
keybox: version 1.2.1

я бы хотел, чтобы все драгоценные камни находились под общим каталогом bin, как будто они включеныfoo

root@bar # find /usr/local/lib/ruby/gems/1.8/gems/*/bin -type f | xargs -I baz ln -s baz /usr/local/bin/ 

, как и ожидалось, это создает символические ссылки из местоположения каждого драгоценного камня на / usr / local / bin /

для некоторых драгоценных камней (например, rake) все работает как положено, для другихкак keybox) не работает.для некоторых драгоценных камней существует разница между сценарием в каталоге gem и тем, который устанавливается в / usr / local / bin.

root@foo # 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)

, так как я уже копирую гемы с одного компьютера на другой, я мог бы так же легко копировать публичные скрипты, но есть ли более «гемиский» способ сделать это?есть ли команда gem, которая будет генерировать общедоступные скрипты, как это было сделано в случае с keybox?

Ответы [ 2 ]

1 голос
/ 07 марта 2014

Попробуйте использовать следующую команду:

gem pristine --all

Это переустановит гемы из кэшированного источника (который, я полагаю, вы скопировали) и, следовательно, должен воссоздать оболочки сценариев, перекомпилировать расширения и т. Д.

Вы также можете проверить документацию , чтобы настроить команду в соответствии с вашими потребностями (есть флаг, чтобы просто восстановить исполняемые файлы, если это все, что вы хотите сделать).

1 голос
/ 04 марта 2012

Если вы установили драгоценные камни через порты, должно работать следующее

  1. Составьте список всех драгоценных камней, например, pkg_info | grep rubygem | cut -d ' ' -f 1
  2. Используйте 'pkg_create -Rnb' для создания пакетовиз локально установленных портов (и необходимых зависимостей).
  3. Скопируйте пакеты на целевой компьютер
  4. Установите их там с помощью pkg_add.
...