在rails应用程序中使用不同的ruby调用shell脚本

时间:2013-04-18 07:48:54

标签: ruby-on-rails ruby rvm

我有一个运行在Ruby 1.9上的Rails应用程序和一个依赖于Ruby 1.8的shell脚本(Podcast Producer)。

我需要从应用程序中调用shell脚本。我使用的Ruby版本管理器是rvm,应用程序在乘客中运行。现在由于显而易见的原因,它为shell脚本带来了错误的Ruby(意味着,它会加载rvm和bundler env并尝试在应用程序运行的同一环境中启动它。)

shell脚本的第一行:

#!/usr/bin/env ruby -I/usr/lib/podcastproducer

在应用中调用

`/usr/bin/podcast`

你会如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

RVM中有do命令。所以你需要打电话:

%x{rvm 1.8.7 do /usr/bin/podcast}

或如果/usr/bin/位于$PATH,您只能运行:

%x{rvm 1.8.7 do podcast}

答案 1 :(得分:1)

您可以使用rvm-shell(包含在RVM安装中)覆盖环境中的当前Ruby / RVM版本并显式使用系统的默认Ruby版本(假设您没有安装备用Ruby版本作为您的系统默认值,您可以通过运行/usr/bin/ruby -v)来检查。

您应该可以在Ruby脚本中使用rvm-shell,如下所示:

`rvm-shell system -c '/usr/bin/podcast'`

system参数指示RVM使用系统的默认Ruby版本。