2014-09-02 43 views
1

我試圖在我的ruby項目的子文件夾中運行bundle,但它似乎在我的初始目錄的上下文中運行,即使我已將當前工作目錄更改爲子文件夾。在子文件夾中運行`bundle` system命令

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

捆綁包命令成功運行,但僅限於父文件夾。通過系統命令更改目錄不會正確切換捆綁程序的上下文,並且會爲父文件夾gemfile運行兩次。我錯過了什麼?

回答

6

就想通了:

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

脫殼而出 - 打開一個子shell任何Ruby代碼(如系統, 反引號,或%X {})將自動使用當前的捆紮機 環境。如果您需要掏出一個不是當前包的 部分的Ruby命令,請將with_clean_env方法與 塊一起使用。在Bundler激活之前,在塊內部創建的任何子殼體將被賦予 環境。例如, 自制命令運行Ruby,但不要捆內工作:

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

+0

順便說一句,如果你只是想執行'系統''with_clean_env'塊內的命令,您可以使用'Bundler.clean_system('')'代替。 – 2016-07-15 11:11:02

1

你可以嘗試:

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

這是我嘗試的第一件事,但捆綁商無法識別新的上下文。 – lfender6445 2014-09-02 03:33:38

相關問題