2012-02-11 4 views
20

이것은 정말 기본적인 루비 보석 질문입니다. 나는이 같은 간단한 루비 스크립트 작성에 익숙 해요 :루비 보석 독립 실행 형 루비 스크립트

#!/usr/bin/ruby 
require 'time' 
t = Time.at(123) 
puts t 

지금 내 스크립트에 내 자신의 루비 보석을 사용하고 싶습니다. 내 레일 프로젝트에서 나는 간단하게 require 'my_gem' 일 수 있습니다. 그러나 이것은 독립 실행 형 스크립트에서 작동하지 않습니다. 독립 실행 형 루비 스크립트에서 내 자신의 보석을 사용하는 가장 좋은 방법은 무엇입니까?

답변

25

최근 버전의 Ruby에서 직접 요구할 수 있습니다.

# optional, also allows you to specify version 
gem 'chronic', '~>0.6' 

# just require and use it 
require 'chronic' 
puts Chronic::VERSION # yields "0.6.7" for me 

당신은 (기본적으로 젬을 필요로하지 않습니다) 루비 1.8에 여전히있는 경우, 당신은 명시 적으로 보석로드 할 시도 이상이 줄을 추가해야합니다 : 또는

require 'rubygems' 

을, 당신 같은 효과를내는 플래그 -rubygems으로 Ruby 인터프리터를 호출 할 수 있습니다. 내가 바로 당신의 질문을 이해하면

2

나는 잘 모르겠지만, 아마 당신은 당신이 쓰는 경우에도 보석을 가지고 있지 않습니다

도 참조 그것은 (당신은 초보자입니다, 그래서 아마도 당신은 보석의 개념을 오해하고 있습니다).

확실한 점은 : 보석 용 보석을 가지고 계신 지요? 그렇지 않다면 보석은 없지만 하나의 스크립트 만 있으면됩니다. 다른 스크립트 내에서 자신의 스크립트를하려는 경우

, 당신은 다만 수 my_script.rb이 주 스크립트와 같은 폴더에있는 경우 루비 1.8

require 'my_script' 

이, 잘 작동합니다. 루비하면 사용할 수 있습니다 1.9+ :이 경우 보석의 필요가 없습니다

require_relative 'my_script' 

.

+0

보석입니다. 더 큰 레일 프로젝트의 일부입니다. 내 스크립트에서이 보석을 사용하기 위해 전체 레일 프로젝트를로드하지 않는 것이 좋습니다. – SundayMonday

6

다음과 같이 사용할 수 있습니다. 이미 설치되지 않은 경우 보석을 설치합니다.

def load_gem(name, version=nil) 
    # needed if your ruby version is less than 1.9 
    require 'rubygems' 

    begin 
    gem name, version 
    rescue LoadError 
    version = "--version '#{version}'" unless version.nil? 
    system("gem install #{name} #{version}") 
    Gem.clear_paths 
    retry 
    end 

    require name 
end 

load_gem 'your_gem' 
1

다음과 같은 방법으로 보석을 설치하면 효과가 있습니다. 보석을 시스템 루비 또는 사용자의 일부로 설치해야하는지 조심하십시오.

#!/usr/bin/env ruby 

require 'rubygems' 

def install_gem(name, version=Gem::Requirement.default) 
    begin 
    gem name, version 
    rescue LoadError 
    print "ruby gem '#{name}' not found, " << 
     "would you like to install it (y/N)? : " 
    answer = gets 
    if answer[0].downcase.include? "y" 
     Gem.install name, version 
    else 
     exit(1) 
    end 
    end 
end 

# any of the following will work... 
install_gem 'activesupport' 
install_gem 'activesupport', '= 4.2.5' 
install_gem 'activesupport', '~> 4.2.5' 

# require as normal (since not all gems install & require with same name) ... 
require 'active_support/all' 

...