これは本当に基本的なRuby gemsの質問です。私は次のような単純なRubyスクリプトの記述に精通しています:
#!/usr/bin/Ruby
require 'time'
t = Time.at(123)
puts t
ここで、スクリプトで自分のRuby gemを使用したいと思います。私のRailsプロジェクトでは、単純にrequire 'my_gem'
。ただし、これはスタンドアロンスクリプトでは機能しません。 スタンドアロンで自分のgemを使用するための最良/適切な方法は何ですかRubyスクリプト?
最近のバージョンの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を必要としない)を使用している場合は、gemをロードする試みの上に次の行を明示的に配置する必要があります。
require 'rubygems'
または、フラグ-rubygems
を使用してRubyインタプリタを呼び出すこともできます。これは同じ効果があります。
参照:
あなたはこのようなものを使うことができます。まだインストールされていない場合は、gemをインストールします。
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'
次のようなgemをインストールすると機能するはずです。 gemをシステムRubyまたはユーザーの一部としてインストールする必要があるかどうかに注意してください。
#!/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'
...
bundler
自体がこれに対処できることに注意してください。 bundler
はバージョン2.6以降、デフォルトでRubyに付属しており、手動でインストールする必要がないため、特に興味深いものです。
アイデアは次のとおりです。
bundler/inline
スクリプトの上部に、gemfile
メソッドを使用し、Gemfile
で行うように、ブロック内で必要なgemを宣言するには、例えば:
require 'bundler/inline'
gemfile do
source 'https://rubygems.org'
gem 'Rainbow'
end
# From here on, Rainbow is available so I can
# print colored text into my terminal
require 'Rainbow'
puts Rainbow('This will be printed in red').red
公式ドキュメントは bundlerのWebサイト:単一ファイル内のbundler Rubyスクリプト にあります。
あなたの質問を正しく理解したかどうかはわかりませんが、書いても宝石を持っていない可能性があります(あなたは初心者なので、宝石の概念を誤解している可能性があります)。
念のため:あなたの宝石の宝石仕様はありますか?そうでない場合は、宝石はありませんが、スクリプトは1つです。
別のスクリプト内に独自のスクリプトが必要な場合は、次のようにします。
require 'my_script'
Ruby 1.8の場合、my_script.rb
はメインスクリプトと同じフォルダにあります。 Ruby 1.9+を使用すると、次のものを使用できます。
require_relative 'my_script'
この場合、宝石は必要ありません。