2012-02-11 87 views
20

這是一個非常基本的紅寶石寶石問題。我很熟悉編寫這樣簡單的ruby腳本:獨立紅寶石腳本中的紅寶石

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

現在我想在我的腳本中使用自己的ruby gem。在我的rails項目中,我可以簡單地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 

如果你仍然對紅寶石1.8(不需要默認RubyGems的),你必須明確地把你上面的嘗試這條線來加載寶石:

require 'rubygems' 

另外,您可以調用標記爲-rubygems的Ruby解釋器,這將具有相同的效果。

參見:

2

我不知道如果我理解正確你的問題,但也許你沒有寶石,即使你寫它(你是一個初學者,所以也許你誤解了寶石的概念)。

只是可以肯定:你必須爲你的創業板gemspec?如果沒有,那麼你就沒有寶石,只有一個腳本。

如果想讓其他腳本里面自己的腳本,你可能只是做:

require 'my_script' 

使用Ruby 1.8這工作得很好,如果my_script.rb是在同一文件夾作爲你的主腳本。隨着紅寶石1.9 +你可以使用:

require_relative 'my_script' 

在這種情況下沒有必要的寶石。

+0

這是一個寶石。它是更大的鐵路項目的一部分。我寧願不加載整個rails項目只是爲了在我的腳本中使用這個gem。 – SundayMonday 2012-02-13 18:09:53

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' 

...