2009-07-15 43 views
1

有沒有一種簡單的方法,運行Ruby腳本時,讓它自動安裝腳本所需的寶石?將多個寶石安裝到計算機上的最佳方法?

例如,請考慮這些要求語句在Ruby腳本的頂部:

require 'net/http' 
require 'fileutils' 
require 'archive/zip' 

現在,我知道(如人類和程序員),對於此腳本使用Ruby某臺PC上運行,在腳本運行之前,需要首先運行'gem install archive-zip'命令。但是如果這個腳本需要在數十臺個人電腦上運行,有什麼能夠讓我無法確保首先安裝所有的gem依賴?

此外,如果有幾個寶石需要?

回答

1

不知道這是否是你是什麼之後,但是當我有一臺服務器設置了我多麼希望我甩我的寶石一個安全的地方的名單...

gem list > my_gems.txt 

如果我需要重建箱子或建立另一臺機器我使用這個腳本來安裝寶石...

bulk_gems.rb 
#! /usr/local/bin/ruby 

STDIN.readlines.each do |l| 
m = l.match /^(\S+) \((.*)\)/ 
unless m.nil? 
    gem_name, versions = m[1], m[2].split(',') 
    versions.each do |v| 
    system "gem install #{gem_name} --version #{v} --ignore-dependencies" 
    end 
end 
end 

more my_gems.txt | bulk_gems.rb 
+0

這與我所說的非常接近。但是如果我想要gem依賴項,劇本會是什麼樣子? – Ash 2009-07-16 02:53:49

0

鞋子的確很乾淨。看到這個blog post by _why

你可以端口一些是標準的紅寶石(沒有花俏的UI)

1

通過使用gem unpack可以解開寶石到一個目錄。從那裏,你可以將它們包含在腳本中。例如,隨機挑選寶石morse(編碼/解碼莫爾斯電碼的寶石),假設我使用gem unpack morse將其放置在目錄/ gems /中。它解壓到目錄morse-0.0.2,因爲這是版本。

$LOAD_PATH << './gems/morse-0.0.2/lib' 
require 'morse' 
# The gem is included, and Morse is now defined.