【问题标题】:"file too short" on bundle install捆绑安装中的“文件太短”
【发布时间】:2013-05-15 22:37:31
【问题描述】:

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 是的,我尝试了您的建议以及bundle --path,但无法让宝石正常工作。但事实证明,您的回答促使我意识到,呃,我可以为每个并发进程创建一个 rvm gemset。所以谢谢:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    相关资源
    最近更新 更多