如何在我的Gemfile中找到未使用的gem

Joe*_*Joe 33 ruby-on-rails gemfile

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

fak*_*eft 36

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

这需要:

  1. 项目的宝石在rvm宝石集中隔离
  2. 安装在使用atime(ubuntu 12.04上的strictatime)选项安装的分区上的gem:

    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
Run Code Online (Sandbox Code Playgroud)

将21:44改为你运行测试的时间.


L.R*_*.R. 13

运行您的测试,然后:

gem stale
Run Code Online (Sandbox Code Playgroud)

执行以下操作:

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

您可以使用此命令来发现您不再使用的 gem 和 gem 版本。


mah*_*off 12

如果在缺席的情况下通过所有测试,则应考虑删除任何宝石.

假设你有很好的测试覆盖率 - 特别是高级功能测试 - 你可以编写一个脚本来有选择地一次删除一个gem.即运行所有测试N次,其中N是Gemfile中的宝石数量,每个测试都有一个缺少的宝石.这将有助于清除宝石,而不是减轻它们的重量.


Mik*_*ike 11

您可以使用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})


Pra*_*thy 8

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

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

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

  • 伤心但真实.我确实希望有一个自动化过程 - 它可以与频繁更改的团队和项目一起使用! (2认同)
  • 这是编译器非常有用的原因之一 (2认同)

ilt*_*mpo 7

有一个bundle clean --force命令可以删除Gemfile.lock定义之外的gem .

请参阅bundle-clean.

  • 这不回答这个问题. (3认同)
  • @iconoclast 是正确的。这只会删除包缓存中未在“Gemfile.lock”中使用的 gem。这与您的应用程序中是否使用 Gem 无关。 (3认同)
  • 从 bundle 1.3.5 开始,-f 选项不再可用,请改用 --force 选项。 (2认同)