独立ruby脚本中的Rubygem

这是一个非常基本的rubygem问题。 我很熟悉编写这样的简单ruby脚本:

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

现在我想在我的脚本中使用我自己的ruby gem。 在我的rails项目中,我可以简单地require 'my_gem' 。 但是,这在独立脚本中不起作用。 在独立的ruby脚本中使用我自己的gem的最佳/正确方法是什么?

您应该能够直接在最新版本的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' ... 

我不确定我是否理解你的问题,但也许你没有gem,即使你写它(你是初学者,所以也许你误解了gem的概念)。

只是为了确定:你有gem的gemspec? 如果没有,那么你没有gem,只有一个脚本。

如果您希望自己的脚本在另一个脚本中,您可以这样做:

 require 'my_script' 

使用ruby 1.8,如果my_script.rb与主脚本位于同一文件夹中,则可以正常工作。 使用ruby 1.9+,您可以使用:

 require_relative 'my_script' 

在这种情况下不需要gem。