Gemmes Ruby dans des scripts Ruby autonomes
C'est une question ruby gems vraiment basique. Je suis familier avec l'écriture de scripts ruby simples comme ceci:
#!/usr/bin/ruby
require 'time'
t = Time.at(123)
puts t
Maintenant, je voudrais utiliser ma propre gemme ruby dans mon script. Dans mon projet rails, je peux simplement require 'my_gem'
. Toutefois, cela ne fonctionne pas dans un script autonome. Quelle est la meilleure façon d'utiliser ma propre gemme dans un script ruby autonome?
4 réponses
Vous devriez pouvoir simplement l'exiger directement dans les versions récentes 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 vous êtes toujours sur Ruby 1.8 (qui ne nécessite pas de RubyGems par défaut), vous devrez explicitement mettre cette ligne au-dessus de votre tentative de chargement de la gemme:
require 'rubygems'
Alternativement, vous pouvez invoquer l'interpréteur Ruby avec le drapeau -rubygems
qui aura le même effet.
Voir aussi:
Vous pourriez utiliser quelque chose comme ça. Il installera la gemme si elle n'est pas déjà installée:
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'
Installer des gemmes avec quelque chose comme ce qui suit devrait fonctionner. Gardez à l'esprit si les gemmes doivent être installées dans le cadre du système ruby ou d'un utilisateur.
#!/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'
...
Je ne suis pas sûr d'avoir bien compris votre question, mais peut-être que vous n'avez pas de gemme, même si vous l'écrivez (vous êtes un débutant, alors peut-être avez-vous mal compris le concept de gemmes).
Juste pour être sûr: Vous avez un gemspec pour votre bijou? Si non, alors vous n'avez pas de gemme, mais un seul script.
Lorsque vous voulez votre propre script dans un autre script, vous pouvez simplement faire:
require 'my_script'
Avec ruby 1.8 cela fonctionne bien, si my_script.rb
est dans le même dossier que votre script principal. Avec ruby 1.9 + vous peut utiliser:
require_relative 'my_script'
Il n'y a pas besoin d'une gemme dans ce cas.