我正在尝试在我的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运行两次。我错过了什么?
答案 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