2012-02-11 18 views
20

Questa è una domanda di gemme ruby ​​davvero semplice. Ho familiarità con la scrittura di script rubino semplice come questo:Gemme di rubino in script di rubini stand alone

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

ora vorrei usare il mio gioiello rubino nel mio script. Nel mio progetto di rotaie posso semplicemente require 'my_gem'. Tuttavia questo non funziona in uno script autonomo. Qual è il modo migliore/corretto per utilizzare la mia gemma in uno script rubino autonomo?

risposta

25

Dovresti poterlo semplicemente richiedere direttamente nelle versioni recenti di 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 

Se siete ancora su Ruby 1.8 (che non richiede RubyGems per impostazione predefinita), si dovrà mettere esplicitamente questa riga sopra il suo tentativo di caricare la gemma:

require 'rubygems' 

In alternativa, è puoi invocare l'interprete Ruby con la bandiera -rubygems che avrà lo stesso effetto.

Vedi anche:

2

non sono sicuro se ho capito la tua domanda giusta, ma forse non hanno una gemma, anche se si scrive (sei un principiante, quindi forse hai frainteso il concetto di gemme).

Solo per essere sicuri: hai una gemspec per la tua gemma? In caso contrario, non hai gemma, ma una singola sceneggiatura.

Quando si desidera che il proprio script all'interno di un altro script, si può solo fare:

require 'my_script' 

con Ruby 1.8 questo funziona bene, se my_script.rb è nella stessa cartella come lo script principale. Con rubino 1.9+ è possibile utilizzare:

require_relative 'my_script' 

Non c'è bisogno di una gemma in questo caso.

+0

È una gemma. Fa parte di un progetto di guide più grandi. Preferirei non caricare l'intero progetto delle rotaie solo per usare questa gemma nel mio script. – SundayMonday

6

È possibile utilizzare qualcosa di simile. Si installerà il gioiello se non è già installato:

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

gemme Installazione con qualcosa come il seguente dovrebbe funzionare. Ricordati che le gemme devono essere installate come parte del sistema ruby ​​o di un utente.

#!/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' 

... 
Problemi correlati