在脚本标题中选择rvm gemset

时间:2011-03-04 21:10:02

标签: ruby bash shell rvm

我想在ruby脚本的标题内指定使用哪个ruby解释器和哪个gemset。

的内容
#!/usr/bin/env source /usr/local/lib/rvm && rvm ruby-1.9.2@system

会很棒。

有关如何执行此操作的任何建议吗?

4 个答案:

答案 0 :(得分:5)

tcurdt的帖子有点误导。在我的系统上,我只是以root身份在系统上设置rvm(ree,1.8.7,& 1.9.2 rubies)。我的/ usr / local / bin看起来像这样:

lrwxrwxrwx 1 root rvm   46 Mar 13 06:50 ree-1.8.7-2011.03 -> /usr/local/rvm/wrappers/ree-1.8.7-2011.03/ruby
lrwxrwxrwx 1 root rvm   44 Mar 13 06:42 ruby-1.8.7-p334 -> /usr/local/rvm/wrappers/ruby-1.8.7-p334/ruby
lrwxrwxrwx 1 root rvm   44 Mar 11 22:42 ruby-1.9.2-p180 -> /usr/local/rvm/wrappers/ruby-1.9.2-p180/ruby

我没有像tcurdt的例子中那样称为系统的gemset。所以我相信实现你所追求的目标的恰当方式就是这样:

#!/usr/bin/env /usr/local/bin/ruby-1.9.2-p180

关于rvm在这里做了什么的一些解释:rvm创建了包装脚本(/ usr / local / rvm / wrappers / *),它设置了GEM_PATH& GEM_HOME。这些是必需的,以便宝石可以作为特定版本的ruby的一部分正确加载。当您进行rvm的系统安装时,会在/usr/local/bin下创建这些包装脚本的链接。如果你已经安装了rvm,那么他们就在这里:$HOME/.rvm/bin

将shebang行(#!/ ....)添加到/usr/bin/env前缀至关重要。如果您只是尝试将其直接指向ruby(例如#!/ usr / local / bin / ruby​​-1.9.2-p180)就不够了。这是因为这些包装器实际上不是ruby解释器,它们是shell脚本,它们在调用脚本作为ruby解释器的参数之前提供环境设置,如下所示:

source "/usr/local/rvm/environments/ruby-1.9.2-p180" 
exec ruby "$@"

$@是您传递给ruby的shell脚本名称。

最后,这是我放在一起的示例脚本,我在cgi-bin目录中运行:

#!/usr/bin/env /usr/local/bin/ruby-1.9.2-p180

puts "Content-Type: text/html"
puts
puts "<html>"
puts "<body>"
puts "<h1>Hello Ruby!</h1>"
puts "<p>shebang: #!/usr/bin/env /usr/local/bin/ruby-1.9.2-p180</p>"
puts "<p>RUBY_VERSION: " + RUBY_VERSION + "</p>"
puts "<p>RUBY_PLATFORM: " + RUBY_PLATFORM + "</p>"
puts "<p>RUBY_RELEASE_DATE: " + RUBY_RELEASE_DATE + "</p>"
puts "</body>"
puts "</html>"

答案 1 :(得分:5)

#!/usr/bin/env rvm 1.9.3@mygemset do ruby

答案 2 :(得分:4)

这是做到这一点的方法......

#!/usr/bin/env /usr/local/bin/ruby-1.9.2-p180@system

答案 3 :(得分:0)

看看这个要点:

https://gist.github.com/343545

HTH