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. 有没有办法让 bundler 更具容错性,并在遇到这些虚假故障时尝试重新运行?
  2. 为什么它们首先会发生?多个进程可能同时执行 rake 任务 - 这是否会损坏 rvm 的 gem 存储库,如果是,我该如何避免这个问题?
4

1 回答 1

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
于 2013-05-16T07:51:29.060 回答