2009-07-15 2 views
1

Ruby 스크립트를 실행할 때 스크립트에 필요한 보석을 자동으로 설치하려면 쉬운 방법이 있습니까? 루비와 특정 PC에서 실행이 스크립트에 대한 그 (인간과 프로그래머로)컴퓨터에 여러 개의 보석을 설치하는 가장 좋은 방법은 무엇입니까?

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

지금, 내가 아는 :

예를 들어, 이러한 루비 스크립트의 상단에 문을 필요로 고려 스크립트가 작동하기 전에 'gem install archive-zip'명령을 먼저 실행해야합니다. 그러나이 스크립트가 수십 개의 PC에서 실행되어야한다면, 모든 보석 의존성을 먼저 설치해야하는 것을 막을 수있는 방법이 있습니까?

또한 보석이 여러 개 필요한 경우 어떻게해야합니까?

답변

1

확실하지 내가 만약 상자를 다시 만들거나 다른 컴퓨터를 만들 필요가 있습니다.이 스크립트를 사용하여 보석을 설치해야합니다. ...

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

내가 말하는 것에 매우 가깝습니다. 그러나 내가 원한다면 스크립트는 어떻게 생겼을 까? – Ash

+0

그냥 '--ignore dependencies'를 제거하십시오 목록이 설치된 보석이라면 이미 의존성이 있으므로 걱정하지 않아도됩니다. – Henry

0

신발에는 정말 매끄러운 방법이 있습니다. 이 부분은 blog post by _why을 참조하십시오.

당신 수 포트 표준 루비에 당신이 디렉토리에 보석을 풀 수 gem unpack을 사용하여

1

(멋진 UI없이) 그 중 일부. 거기에서 스크립트에 포함시킬 수 있습니다. 예를 들어 무작위로 보석 morse (모스 코드를 인코딩/디코딩하는 보석)을 선택하면 gem unpack morse을 사용하여/gems/디렉토리에 저장한다고 가정 해 봅시다. 그것이 morse-0.0.2 디렉토리에 압축이 풀립니다.

gem list > my_gems.txt 

... 이것은 당신이 후에하지만 서버가 나는 안전한 곳으로 내 보석의 목록을 덤프 방법을 설정 내가 때 정확히 어떤 경우

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