如何将Ruby脚本文件设置为可执行文件?

6
我希望将我的 Ruby 脚本作为可执行文件运行,并且我需要在 /usr/bin/ 目录下执行。我知道可以这样做。
#!/usr/bin/ruby
puts "hello"

And

chmod +x hello

但是我也希望能够引入一些 Ruby 文件。
例如,如果我添加了

require './other_ruby_script' 

当我将 Ruby 可执行文件移动到 /usr/bin/ 中,并将其添加到我的代码中时,会出现以下错误:

无法加载文件 'other_ruby_script'

我想在 /usr/bin 目录下执行 Ruby 文件。

也许我应该编译它?但是我不明白当我搜索“如何编译?”时得到的结果。

我该如何创建可执行的 Ruby 代码作为我的代码的适当格式 (require './other_file')。而且我不想像这样执行 ./hello 我的可执行文件。我只需要执行 hello 就可以了。


1
other_file 应该在库路径中。一个选项是将它打包成 gem 包。 - Sergio Tulentsev
4个回答

4
#!/usr/bin/env ruby
require_relative 'other_ruby_script'
puts "hello"

2
我认为你在问如何配置正确的加载路径。首先,在你的脚本中,我会执行以下操作:
puts $:

这应该打印出你是否正在加载正确的 Ruby 环境(如果你使用 rbenv 或 rvm 可能会有问题)。例如,我得到的输出是:
/Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/site_ruby/1.9.1
/Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/site_ruby/1.9.1/x86_64-darwin11.3.0
/Users/pmu/.rbenv/versions/1.9.3-p194/lib/ruby/site_ruby

只要您的加载路径中不包含脚本“other_ruby_script”所在的目录,就会出现此错误:
LoadError: cannot load such file -- other_ruby_script

所以,您应该尝试使用以下命令添加负载路径:
$:.unshift "#{File.dirname(__FILE__)}/../some_path"

如果您一开始没有加载Ruby环境,那么您的这行代码是:

#!/usr/bin/ruby 

需要设置以从Rbenv或Rvm加载环境。

如果我编译我的 Ruby 脚本,会更容易吗?因为我正在开发一个 Ruby 项目,其中有许多其他的 Ruby 文件。 - deniz
谷歌在这个主题上没有给出结果,因为Ruby使用虚拟机动态编译代码,就像Java、Python或Perl一样。据我所知,没有编译器。当使用Ruby时,您需要学习如何动态加载依赖项。 - poseid

1

您可以编写一个Shell脚本,从中执行Ruby文件。您需要在Shell脚本中导出PATH和GEM_HOME。Shell脚本将如下所示:

#!/bin/bash
export PATH = /usr/local/rvm/gems/ruby-1.9.3-p194
export GEM_HOME = /usr/local/rvm/gems/ruby-1.9.3-p194
cd /path/to/ruby_script
ruby file_name.rb

以下命令可以获取PATH和GEM_HOME:

PATH和GEM_HOME可通过以下命令获得:

echo $PATH
echo $GEM_HOME 

0

这个问题是针对Linux环境的,但这个答案可能会帮助未来遇到此类问题的Windows用户。

有一些Ruby的打包Gems可以在这里找到。

最受欢迎的一个是OCRA(一键Ruby应用程序),它既可以作为Gem,也可以作为独立的Ruby文件使用,并将您的Ruby项目打包成Windows可执行文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接