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

时间:2013-01-15 08:45:08

标签: ruby-on-rails gemfile

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

6 个答案:

答案 0 :(得分:35)

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

这需要:

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

    sudo mount -o remount,strictatime /

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

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

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

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

答案 1 :(得分:12)

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

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

答案 2 :(得分:10)

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

生成可从启动时间删除的宝石列表:

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

答案 3 :(得分:8)

我怀疑是否有一种在Gemfile中找到未使用的宝石的自动方式。

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

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

答案 4 :(得分:7)

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

请参阅bundle-clean

答案 5 :(得分:1)

运行测试,然后:

gem stale

执行以下操作:

  

stale命令列出了其中所有文件的最新访问时间   您安装的宝石。

     

您可以使用此命令发现您不是的宝石和宝石版本   更长的使用时间。