我有一个运行在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`
你会如何解决这个问题?
答案 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版本。