【问题标题】:Bundle install tries to use cache file捆绑安装尝试使用缓存文件
【发布时间】:2013-09-12 10:21:57
【问题描述】:

当我尝试进行捆绑安装时,我的 gem_path 和 gem_home 指向 /usr/local/rvm/gems/ 我没有写入权限,并且由于权限无效而失败。因此,我将两条路径都更改为我确实具有写入权限的本地目录。

这样做时,我会进行捆绑安装,我得到:

bruno@test6:~$ bundle install
Fetching gem metadata from https://rubygems.org/.........
Fetching gem metadata from https://rubygems.org/..

Bundler::GemspecError: Could not read gem at   /afs/varda.io/user/b/br/bruno/test6/cache/rake-10.1.0.gem. It may be corrupted.
An error occurred while installing rake (10.1.0), and Bundler cannot continue.
Make sure that `gem install rake -v '10.1.0'` succeeds before bundling.

好吧,如果我安装 gem,它工作得很好。

但是 bundle 是行不通的;即使尝试删除它抱怨的缓存文件夹。

我确实尝试过“bundle install --no-cache”,但它以同样的方式失败。 (bundle install --deployment 也可以正常工作)我如何让 bundle install 工作?

我花了很多时间,如果有人能提供任何指导,我将不胜感激!

【问题讨论】:

  • 如果您尝试GEM_HOME=/path/you/can/write/to bundle install 会怎样?
  • 感谢安科。我已经这样做了;结果是一样的。
  • 你在unix系统上吗?我发现 strace 工具很有用。 strace bundle install 将向您显示所有系统调用,它们会告诉您正在尝试打开哪些文件以及失败的位置。
  • 您是管理员吗?你为什么不给自己/usr/local的写权限?

标签: ruby-on-rails ruby gem bundle


【解决方案1】:

通过删除缓存文件并重新运行捆绑安装来修复它。

rm -rf 。在你的情况下:

rm -rf /afs/varda.io/user/b/br/bruno/test6/cache

【讨论】:

  • mv <location_of_cache>/<gemname>.gem ~/.Trash/ 效果很好,并在垃圾箱中提供了一个备用选项,以防您搞砸了。
【解决方案2】:

好的,首先,您可以使用 rvm(用户安装)轻松解决所有这些问题,请参阅 http://rvm.io,如果这不是一个选项,您可以尝试使用项目特定的 gem 路径。 例如,我有以下捆绑器配置文件 (~/.bundle/config)

---
BUNDLE_PATH: .bundle
BUNDLE_DISABLE_SHARED_GEMS: "1"

这会导致 bundler 将所有 gem 安装在 .bundle 子目录中(在您的项目文件夹中,您在其中运行 bundle install)。现在,如果您记得使用 bundle exec 作为您的垃圾箱(例如 cap(istrano)),那就没问题了。

如果您以某种方式搞砸了您的捆绑程序/缓存,请尝试删除 .bundle 文件夹(在您的项目文件夹中)

【讨论】:

  • 非常感谢玛丽安,实际上是 rvm 引起了冲突。我使用的是 rvm,但不是安装单个 gem,我重新映像了我的 ubuntu 盒子,并在没有 rvm 的情况下安装了 rails,问题就消失了。
  • 感谢玛丽安,这对我有用并帮助我了解它在做什么。我没有将 gems 安装在 .bundle 子目录中,而是将它们放在 tmp 文件夹中。 --- BUNDLE_PATH: "/tmp/project-bundle" BUNDLE_DISABLE_SHARED_GEMS: '1'
【解决方案3】:

尝试告诉bundler 它必须使用哪个文件夹,例如bundle install --path <myfolder>bundle install --path gems

请注意,我尚未对此进行测试,但看起来很有希望,请为我们发布结果。

【讨论】:

    【解决方案4】:

    如果可行,我建议您在~/.rvm 中安装您自己的rvm 副本,这样您就不会被系统绑定。尝试采用混合系统+用户的方法可能会在以后导致更多的麻烦。

    或者,如果您愿意接受其他解决方案,rbenv 是一个更精简、更清洁的 ruby​​ 经理。

    【讨论】:

    • 可能会导致什么样的头痛?
    • 就像不断需要设置GEM_HOME(并且可能重新排列GEM_PATH 中的顺序),试图理解gem 标志,如--user-install,不得不向您的@ 添加另一个目录987654328@ 如果您想轻松运行可执行文件。最重要的是,rvm 已经对你的环境变量做了一些疯狂的事情,如果你升级 rvm,它甚至可能停止工作。
    • 此外,如果您尝试通过 Capistrano、cron 作业、守护程序甚至 ruby​​ 的 system 方法运行 GEM_HOME 敏感命令,您将开始想要开枪。如果你想记住何时以及如何传递环境变量,你会发疯的。
    【解决方案5】:

    rvm reinstall all 为我工作。

    在你这样做之前,我会尝试

    gem update --system
    gem pristine --all --no-extensions
    

    请注意rvm reinstall all 需要很长时间才能完成...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多