2012-02-11 3 views
20

これは本当に基本的なルビーの宝石の質問です。私はこのような単純なルビスクリプトを書くことに慣れています:ルビーの宝石をスタンドアロンのルビースクリプト

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

私は自分のスクリプトに自分のルビーの宝石を使いたいと思います。私のレールプロジェクトでは、簡単にrequire 'my_gem'とすることができます。ただし、これはスタンドアロンスクリプトでは機能しません。 スタンドアローンのRubyスクリプトで自分の宝石を使用するのに最適な方法は何ですか?

答えて

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 

あなたは(デフォルトではRubyGemsのを必要としない)ルビー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' 

... 
関連する問題