2017-08-10 35 views
0

我有一個錯誤,有時運行bundle install如何從Ruby腳本和捕獲錯誤

Bundler::GemspecError: Could not read gem at /path/to/cache/gem It may be corrupted 

時,我有一個網頁的URL過濾器,似乎在下載寶石,如果我刪除(阻止初次嘗試運行包有問題的緩存文件並再次運行,它工作)。此外,緩存文件的內容是來自Web網頁過濾器頁面的HTML。

我想不必刪除緩存文件並重新運行,如果發生這種情況,我想讓捆綁器自動重新運行。

我想過從ruby腳本運行bundle,但我似乎無法捕獲錯誤。

我需要在Docker中自動執行我的項目構建。

begin 
    puts "Starting bundle install" 
    system %w[bundle install] 
rescue Bundler::GemspecError => e 
    puts e 
end 

但是,我似乎無法拯救異常;拋出的錯誤是:

Bundler::GemspecError: Could not read gem at /Users/lewis/.rvm/gems/[email protected]/cache/rack-2.0.3.gem. It may be corrupted. 
An error occurred while installing rack (2.0.3), and Bundler cannot continue. 
Make sure that `gem install rack -v '2.0.3'` succeeds before bundling. 

未捕獲異常,因爲我沒有輸出。我被告知這是因爲我現在在Ruby世界之外運行捆綁軟件可以這麼說。

任何人都可以提供如何我會去了解這個請

感謝

+0

的可能的複製[紅寶石系統命令檢查退出代碼(https://stackoverflow.com/questions/18728069/ruby-system-command-check-exit-code) –

回答

0

您不能從系統營救的命令,因爲它不是爲紅寶石東西致命應的命令失敗,而是你有任何意見使用if條件檢查系統命令是成功還是失敗。 它會更喜歡:

puts "Starting bundle install" 
if system('bundle install') 
    puts 'bundle successful' 
else 
    puts 'bundle failed, deleting cache file and retrying' 
    system('command to delete cache file goes here') 
    system('bundle install') 
end 
+0

恩,對不起?下投票?它回答了這個問題。 – Thermatix

+0

是的,它回答了重複的問題,而不是像這樣標記它。 –

+0

但是,你鏈接的問題/答案並不能解釋爲什麼救援行不通,所以最好用80%,因爲它不能解釋這方面的一切。也許在下一次投票之前考慮一切,並非所有事情都是重複的。 – Thermatix