如何在我的Gemfile中找到未使用的gem,以便我可以清理不再使用的引用。
答案 0 :(得分:35)
使用linux'文件访问时间,以查看实际使用的内容。
这需要:
安装在使用atime(ubuntu 12.04上的strictatime)选项安装的分区上的gem:
sudo mount -o remount,strictatime /
完整的测试覆盖率(即我们将依靠测试运行来更新文件访问时间)
记下时间并运行测试。然后从你的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。从那里只需要一些分析来确定哪些宝石可以完全去除。
生成可从启动时间删除的宝石列表:
gem 'gem_bench', :group => :console
添加到您的Gemfile。bundle install
bundle exec rails console
:a = GemBench.check({verbose: true})
答案 3 :(得分:8)
我怀疑是否有一种在Gemfile中找到未使用的宝石的自动方式。
对于随着时间推移构建应用程序的人,应该很容易手动识别由于某种原因而在途中被丢弃的宝石。
对于从其他人继承的遗留应用程序,手动识别未使用的宝石是一项非常困难的任务。如果系统有全面的测试覆盖率,它将有助于通过反复试验删除未使用的gem,同时确保测试在Gemfile中的每次更改时通过。
答案 4 :(得分:7)
bundle clean --force
命令用于删除Gemfile.lock
定义之外的宝石。
请参阅bundle-clean。
答案 5 :(得分:1)
运行测试,然后:
gem stale
执行以下操作:
stale命令列出了其中所有文件的最新访问时间 您安装的宝石。
您可以使用此命令发现您不是的宝石和宝石版本 更长的使用时间。