2012-02-11 21 views
20

Esta es una pregunta de gemas de rubíes realmente básica. Estoy familiarizado con la escritura de guiones de rubí simple como esto:Gemas de rubí en scripts de rubí independientes

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

Ahora me gustaría usar mi propia gema de rubíes en mi guión. En mi proyecto de carriles, simplemente puedo require 'my_gem'. Sin embargo, esto no funciona en una secuencia de comandos independiente. ¿Cuál es la mejor forma de usar mi propia gema en una secuencia de comandos de ruby ​​independiente?

Respuesta

25

Debería poder simplemente requerirlo directamente en versiones recientes de 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 

Si usted todavía está en Rubí 1.8 (que no requiere RubyGems por defecto), se le tiene que poner de forma explícita esta línea por encima de su intento de cargar la gema:

require 'rubygems' 

alternativa, puede invocar el intérprete de Ruby con la bandera -rubygems que tendrá el mismo efecto.

Ver también:

2

No estoy seguro de si he entendido su pregunta correcta, pero tal vez usted no tiene una joya, incluso si se escribe (usted es un principiante, por lo que tal vez no entendió el concepto de gemas).

Sólo para estar seguro: ¿Tiene un gemspec para su joya? Si no, entonces no tienes una gema, sino una sola secuencia de comandos.

Cuando usted quiere que su propio guión dentro de otra secuencia de comandos, puede simplemente hacer:

require 'my_script' 

con Ruby 1.8 esto funciona bien, si my_script.rb está en la misma carpeta que el script principal. Con ruby ​​1.9+ puede usar:

require_relative 'my_script' 

No es necesario tener una gema en este caso.

+0

Es una joya. Es parte de un proyecto de rieles más grande. Preferiría no cargar todo el proyecto de rieles solo para usar esta gema en mi script. – SundayMonday

6

Podría usar algo como esto. Instalará la gema si no está ya instalada:

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

La instalación de gemas con algo como lo siguiente debería funcionar. Tenga en cuenta si las gemas deben instalarse como parte del ruby ​​del sistema o de un usuario.

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

...