2013-05-15 17 views
0

我偶爾會得到一個「文件過短」的消息在運行時bundle exec rake「文件太短」安裝

rake aborted! 
/var/lib/jenkins/.rvm/gems/ruby-1.9.3-p327/bundler/gems/amatch-0f95f4ce269f/lib/amatch_ext.so:  file too short - /var/lib/jenkins/.rvm/gems/ruby-1.9.3-p327/bundler/gems/amatch-0f95f4ce269f/lib/amatch_ext.so 
  1. 有沒有一種方法,使打捆更多的容錯,並嘗試重新在遇到這些虛假故障時運行?
  2. 他們爲什麼會在第一時間發生?多個進程可能同時執行rake任務 - 這可以破壞rvm的gem存儲庫,如果有的話,我該如何避免這個問題?

回答

1

如果你用它在多個進程,然後使用bundle --standalone - 假設每一道工藝都是由不同的道路跑了 - 如果他們都使用相同的路徑,那麼你可以嘗試bundle --path /path/for/gems$$/$$將與進程的PID來代替 - 但是--path是錄製的選項,這將無濟於事,因爲只有最後一次運行將在此目錄中可見。

最好的辦法是限制在同一時間執行的運行量。

其他選項將被修改GEM_HOME在運行時,但是也會併發詹金斯所以很有可能這是行不通的:

OLD_GEM_HOME=$GEM_HOME 
GEM_HOME=$(mktemp -d) 
cp -r $OLD_GEM_HOME/ $GEM_HOME/ 
bundle install 
# other commands 
rm -rf $GEM_HOME/ 
GEM_HOME=$OLD_GEM_HOME 
+0

是的,我想你的建議與'束--path'和couldn沿不太可能讓寶石正常工作。事實證明,雖然,你的回答促使我意識到,嗯,我可以爲每個併發進程創建一個rvm gemset。那謝謝啦 :-) – cbmanica