捆绑安装上的“文件太短”

时间:2013-05-15 22:37:32

标签: ruby-on-rails-3 rake rvm bundler

运行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存储库,如果是这样,我该如何避免这个问题呢?

1 个答案:

答案 0 :(得分:1)

如果您在多个流程中使用它,请使用bundle --standalone - 假设每个流程都是从不同的路径运行 - 如果它们都使用相同的路径,那么您可以尝试bundle --path /path/for/gems$$/ $$将被进程pid替换 - 但是--path是记录选项,这没有帮助,因为只有最后一次运行才会在此目录中可见。

最好是限制同时执行的运行量。

其他选项是在运行时修改GEM_HOME,但这可能会因jenkins而变得复杂,所以很可能这不会起作用:

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