在子文件夹中运行`bundle`系统命令

时间:2014-09-02 03:09:58

标签: ruby bundler

我正在尝试在我的ruby项目的子文件夹中运行bundle,但它似乎是在我的初始目录的上下文中运行,即使我已将当前工作目录更改为子文件夹。

# change directories and run bundle in a sub directory:
# ruby script.rb
system('bundle')
system('cd sub_folder')
system('bundle')

bundle命令成功运行,但仅适用于父文件夹。通过系统命令更改目录无法正确切换bundler的上下文,并为父文件夹gemfile运行两次。我错过了什么?

2 个答案:

答案 0 :(得分:9)

刚想通了:

Dir.chdir('sub_folder') do
  Bundler.with_clean_env do 
    system('bundle')
  end
end
  

Shelling out - 任何打开子shell的Ruby代码(如系统,   反引号,或%x {})将自动使用当前的Bundler   环境。如果你需要shell一个没有的Ruby命令   当前捆绑包的一部分,使用with_clean_env方法   块。在块内创建的任何子壳都将被赋予   在Bundler被激活之前存在的环境。例如,   Homebrew命令运行Ruby,但不在bundle中工作:

http://bundler.io/man/bundle-exec.1.html#ENVIRONMENT-MODIFICATIONS

答案 1 :(得分:1)

你可以尝试:

# ruby script.rb
Dir.chdir('sub_folder') do
  system('bundle')
end