Ruby gems в автономных ruby скриптах

Это действительно базовый вопрос о ruby gems. Я знаком с написанием простых скриптов ruby, таких как этот:

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

Теперь я хотел бы использовать свой собственный гем ruby в своем скрипте. В моем проекте rails я могу просто require 'my_gem'. Однако это не работает в отдельном скрипте. Какой лучший/правильный способ использовать мой собственный гем в отдельном скрипте на ruby?

25
задан ThinkingStiff 13 March 2013 в 05:08
поделиться

3 ответа

Вы должны иметь возможность просто потребовать это напрямую в последних версиях 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

Если вы все еще используете Ruby 1.8 (который по умолчанию не требует RubyGems), вам придется явно поставить эту строку над попыткой загрузить драгоценный камень:

require 'rubygems'

В качестве альтернативы, Вы можете вызвать интерпретатор Ruby с флагом -rubygems, который будет иметь тот же эффект.

См. Также:

26
ответ дан 28 November 2019 в 21:18
поделиться

Вы можете использовать что-то вроде этого. Он установит драгоценный камень, если он еще не установлен:

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'
8
ответ дан 28 November 2019 в 21:18
поделиться

Я не уверен, правильно ли я понял ваш вопрос, но, возможно, у вас нет драгоценного камня, даже если вы пишете его (вы новичок, поэтому, возможно, вы неправильно поняли понятие драгоценных камней).

Просто чтобы быть уверенным: у вас есть драгоценный камень для вашего драгоценного камня? Если нет, то у вас нет драгоценного камня, но есть один скрипт.

Если вы хотите, чтобы ваш собственный скрипт находился внутри другого скрипта, вы можете просто сделать:

require 'my_script'

С ruby ​​1.8 это работает нормально, если my_script.rb находится в той же папке, что и ваш основной скрипт. С ruby ​​1.9+ вы можете использовать:

require_relative 'my_script'

В этом случае драгоценность не нужна.

1
ответ дан 28 November 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: