从rails shell命令运行bundle

时间:2014-11-10 16:24:36

标签: ruby-on-rails shell bundler

我有一个执行多个shell命令的Rails 4应用程序,一切正常,但现在我正在尝试从它执行一个shell命令来检查不同应用程序的捆绑,甚至是这个应用程序未使用的引擎,以及我得到的就是结果,好像是在查看自己的包。

这可能令人困惑,所以让我试着让它更清楚:

Rails app
  |--operations folder
      |--app1
      |--engine1
      |--app2

现在rails应用程序执行一个shell命令来检查操作文件夹中任何这些应用程序/引擎的包,如下所示:

out = %x[cd operations/app1 && bundle list 2>&1]

但结果是执行Rails应用程序使用的宝石列表,而不是我要检查的app1中的宝石列表。

为什么会这样?我也尝试使用--gemfile=选项指定Gemfile无济于事。如何在目标应用上执行捆绑操作?

这样做的原因是我构建了一个持续集成应用程序,用于测试和构建来自其他应用程序和引擎的软件包,有时一些应用程序/引擎需要CI没有的gem,因此运行测试失败我想在运行测试之前让CI安装它们,如果它没有它们的话。

1 个答案:

答案 0 :(得分:0)

默认情况下,子进程继承Bundler设置的环境。

要抑制此行为,请使用包含要在干净环境中运行的命令的块调用Bundler.with_clean_env

out = Bundler.with_clean_env { %x[cd operations/app1 && bundle list 2>&1] }

有关详情,请参阅http://bundler.io/man/bundle-exec.1.html#Shelling-out