【问题标题】:How to find unused gems in my Gemfile如何在我的 Gemfile 中找到未使用的宝石
【发布时间】:2012-12-29 07:53:39
【问题描述】:

如何在我的 Gemfile 中找到未使用的 gem,以便我可以清理不再使用的引用。

【问题讨论】:

    标签: ruby-on-rails gemfile


    【解决方案1】:

    运行您的测试,然后:

    gem stale
    

    执行以下操作:

    stale 命令列出所有文件的最新访问时间 您安装的 gem。

    您可以使用此命令来发现您不知道的 gem 和 gem 版本 使用时间更长。

    【讨论】:

      【解决方案2】:

      使用 linux 的文件访问时间来查看实际使用的内容。

      这需要:

      1. 项目的 gem 被隔离在 rvm gemset 中
      2. gems 安装在使用 atime(ubuntu 12.04 上的 strictatime)选项挂载的分区上:

        sudo mount -o remount,strictatime /

      3. 完整的测试覆盖率(即我们将依靠测试运行来更新文件访问时间)

      记下时间并运行测试。然后从你的 gemdir 中,做:

      ls --time-style long-iso -ltud1 $PWD/*/lib/** | grep "21:44" | sed s/.*gems.// | sed s/.lib.*// | sort -u
      

      将 21:44 更改为您运行测试的任何时间。

      【讨论】:

      • 这是一个非常聪明的解决方案——可能是最准确的答案。
      • 真的很感激。对我来说,这是一个相当长的潜入兔子洞。
      • 这无疑是对未使用的宝石进行粗略评估的最佳解决方案
      【解决方案3】:

      bundle clean --force 命令可以删除Gemfile.lock 定义之外的宝石。

      bundle-clean

      【讨论】:

      • 从 bundle 1.3.5 开始,-f 选项不再可用,请改用 --force 选项。
      • 是的,我得到未知开关'-f'。
      • 这不能回答问题。
      • @iconoclast 是正确的。这只是删除了你的包缓存中没有在你的Gemfile.lock 中使用的 gem。这与您的应用程序中是否使用 Gem 无关。
      【解决方案4】:

      如果所有测试都通过,则任何 gem 都应考虑移除。

      假设您有良好的测试覆盖率 - 特别是高级功能测试 - 您可以编写一个脚本来一次有选择地删除一个 gem。即运行所有测试 N 次,其中 N 是 Gemfile 中的 gem 数量,每个测试都有一个缺失的 gem。这将有助于剔除无法发挥作用的宝石。

      【讨论】:

        【解决方案5】:

        您可以使用gem_bench gem 来分析您的 Gemfile 并确定哪些 gem 在启动时不需要。从那里只需要进行一些分析即可确定可以完全移除哪些宝石。

        要生成可以从启动时删除的 gem 列表:

        1. gem 'gem_bench', :group => :console 添加到您的 Gemfile。
        2. 运行bundle install
        3. 使用以下命令运行bundle exec rails console
        4. a = GemBench.check({verbose: true})

        【讨论】:

          【解决方案6】:

          我怀疑是否有一种自动方法可以在 Gemfile 中找到未使用的 gem。

          对于随着时间的推移构建应用程序的人来说,手动识别由于某种原因而被丢弃的宝石应该很容易。

          对于从其他人继承的遗留应用程序,手动识别未使用的 gem 是一项非常困难的任务。如果系统有全面的测试覆盖率,它将有助于通过反复试验删除未使用的 gem,同时确保测试在 Gemfile 中的每次更改时通过。

          【讨论】:

          • 悲伤但真实。不过,我确实希望有一个自动化的流程 - 它适用于经常更改的团队和项目!
          • 这是编译器非常有用的原因之一
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-12-10
          • 1970-01-01
          • 2016-02-15
          • 1970-01-01
          • 1970-01-01
          • 2014-04-25
          • 2011-11-16
          相关资源
          最近更新 更多