【问题标题】:How do I check that all the dependencies of my installed Ruby gems are satisfied?如何检查已安装的 Ruby gem 的所有依赖项是否满足?
【发布时间】:2011-05-07 04:36:13
【问题描述】:

我一定是错过了什么,因为昨晚我惊讶地发现在谷歌上搜索 check gem dependencies 和类似的东西并没有找到答案。

我基本上是在大致相当于rpm -V - 一个命令将遍历我安装的部分或全部gem,并确保它们的依赖项也已安装。由于gem install 默认安装任何依赖的gem,通常这不是必需的;但是,如果您 gem uninstall 一个 gem 并告诉它继续卸载,即使其他 gem 依赖于正在卸载的 gem,那么显然您最终会遇到依赖关系损坏。问题是,如何在不安装/卸载/更新任何 gem 的情况下列出那些损坏的依赖项?

注意涉及 Bundler 的答案对我来说用处不大,因为由于各种原因我仍然停留在 Rails 2.x 上。

【问题讨论】:

    标签: ruby dependencies gem verification


    【解决方案1】:

    我绝对同意将应用程序切换到 Bundler。如果您碰巧正在明确寻找一种方法来快速识别系统上已安装 gem 的未满足的 gem 依赖项(就像我一样),那么您可以试试这个脚本。

    https://gist.github.com/1124953

    【讨论】:

      【解决方案2】:

      在 bash 外壳中:

      gem list --no-version > list
      gem dependency --pipe > depends
      grep -v -f list depends > failed.txt
      rm list
      rm depends
      

      failed.txt 现在将列出所有未安装的依赖项。

      【讨论】:

      • 谢谢,这很有用!虽然我认为它仍然遗漏了一些不满意的依赖关系,例如如果 gem A 依赖于 gem B 的 x 版本,但只安装了 gem B 的版本 y,则不会显示 gem A 的依赖关系不满足,因为它只检查 gem B 是否已安装。
      • 如果答案有用,您可以考虑投票。您正在寻找的功能曾经被称为“gem lock”,但lock 命令已被弃用,rubygem 小组推荐使用 Bundler。我的旧版 gems 仍然有 lock 命令,你可以看看你的是否也有。
      • 如果 StackOverflow 允许,我会投票赞成 :-( 它需要 15 名声望,考虑到这是我自己的问题,这似乎很荒谬。
      【解决方案3】:

      您是否尝试过运行gem update?这将为您的所有 gem 运行所有依赖项测试。您可以运行它以安装到单独的目录中。

      [编辑] 另外,当你运行gem check 时会发生什么? gem dependency 将列出所有 gem 依赖项。我很确定,如果它没有告诉您是否安装了某些东西,您可以将输出通过管道传送到check 之类的命令,以查看是否安装了这些 gem。 [/编辑]

      【讨论】:

      • 谢谢,但这也会产生更改 gem 版本的副作用,这可能会破坏我的 Rails 应用程序。我专门在对本地宝石进行了只读检查之后 - 我将更新原始问题以明确这一点。
      • 真的。但是您可以运行它,以便更新不会安装在您的 gem 文件夹中。另外,你可以试试gem outdated
      • gem check 不输出任何东西,但它并没有声称要检查依赖关系。同样,gem outdated 仅报告哪些 gem 有更新的版本可用,再次忽略任何依赖关系。
      【解决方案4】:

      我知道您说过您对有关 Bundler 的答案不感兴趣,但是……

      Bundler 将为您处理 gem 依赖项解析,并且与 Rails 2.3 兼容。我已经将 Bundler 与许多 Rails 2 应用程序一起使用,并且没有任何问题。

      这里有在 Rails 2.3 上安装 Bundler 的说明:http://gembundler.com/rails23.html

      【讨论】:

      • 谢谢 - 很高兴知道。但是假设我安装了 Bundler,我将如何对所有已安装的 gem 执行依赖项检查?我是否必须创建一个包含所有这些的虚拟 Gemfile,然后运行 ​​bundle check 或类似的?
      • 我不建议使用虚拟 Gemfile,而是完全转向 Bundler。这样,您不仅可以解决当前的问题,还可以避免将来发生此类事情。
      • 谢谢 - 我看过 Bundler,我认为你是对的。很遗憾gem 不支持检查损坏的依赖项,但是将我的工作流程更改为 Bundler 意味着我不必再关心损坏的依赖项,因为bundle install 将确保任何重要的损坏的依赖项 在给定项目的上下文中是固定的。
      猜你喜欢
      • 2012-06-03
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 2014-04-08
      • 2017-11-17
      • 1970-01-01
      相关资源
      最近更新 更多