ruby on rails - tipos - Gemas de rubíes en guiones de rubíes independientes
tipos de piedras preciosas (4)
Debería poder simplemente exigirlo 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 aún está en Ruby 1.8 (que no requiere RubyGems por defecto), tendrá que poner explícitamente esta línea sobre su intento de cargar la gema:
require ''rubygems''
Alternativamente, puede invocar al intérprete de Ruby con la bandera -rubygems
que tendrá el mismo efecto.
Ver también:
Esta es una pregunta muy básica de gemas rubí. Estoy familiarizado con la escritura de guiones ruby simples como este:
#!/usr/bin/ruby
require ''time''
t = Time.at(123)
puts t
Ahora me gustaría usar mi propia gema rubí en mi guión. En mi proyecto de rieles 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?
Instalar gemas con algo como lo siguiente debería funcionar. Tenga en cuenta si las gemas deben instalarse como parte de 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''
...
No estoy seguro de si entendí bien tu pregunta, pero quizás no tengas una gema, incluso si la escribes (eres un principiante, así que tal vez entendiste mal el concepto de gemas).
Solo para estar seguro: ¿Tienes una gemspec para tu gema? Si no, entonces no tienes gema, sino un solo script.
Cuando desee su propio script dentro de otro script, puede hacer lo siguiente:
require ''my_script''
Con ruby 1.8 esto funciona bien, si my_script.rb
está en la misma carpeta que tu script principal. Con ruby 1.9+ puedes usar:
require_relative ''my_script''
No hay necesidad de una gema en este caso.
Podrías usar algo como esto. Se 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''