我是RoR的新手,并且正在进入一个大型的RoR项目。该项目使用了一堆宝石。实际上,Gemfile.lock文件(包括依赖项)长度为460行。有人告诉我,该项目经历了几个不同的开发人员,并且那里可能存在很多问题。
有没有办法生成每个宝石的列表?它并不完全直观,特别是像“capybara”,“cocaine”和“raindrops”这样的名字。
答案 0 :(得分:2)
假设每个gem都有一个有意义的描述,你可以从Rails控制台运行这样的东西:
Gem.loaded_specs.values.map { |g| "#{g.name}: #{g.summary}" }
Ruby的动态特性使得很难自动找到未使用的gems(例如通过代码分析)。但是,您可以尝试逐个删除宝石。如果您的项目测试套件在没有给定宝石的情况下通过,那么它肯定是一个强有力的信号,表明它可以安全移除。
答案 1 :(得分:2)
你真的不应该过分强调Gemfile.lock
中的内容,只有Gemfile
。
为了获取宝石详细信息,我只是将这个小脚本掀起来转储当前捆绑中所有宝石的摘要:
require 'yaml'
gems = `bundle list`
names = gems.scan(/^\s+\*\s+([\w-]+)\s+\(.*\)\s*$/).flatten
names.each do |name|
summary = YAML.parse(`gem spec #{name} summary`).root.value rescue '???'
puts "#{name}: #{summary}"
end
将其保存到文件并在命令行上运行,如下所示:
ruby whatever-you-saved-it-as.rb
对于我的一个项目,我得到了这个:
actionmailer: Email composition, delivery, and receiving framework (part of Rails).
actionpack: Web-flow and rendering framework putting the VC in MVC (part of Rails).
actionview: Rendering framework putting the V in MVC (part of Rails).
activemodel: A toolkit for building modeling frameworks (part of Rails).
activerecord: Object-relational mapper framework (part of Rails).
activesupport: A toolkit of support libraries and Ruby core extensions extracted from the Rails framework.
addressable: URI Implementation
annotate: Annotates Rails Models, routes, fixtures, and others based on the database schema.
arel: Arel is a SQL AST manager for Ruby
ast: A library for working with Abstract Syntax Trees.
astrolabe: An object-oriented AST extension for Parser
awesome_print: Pretty print Ruby objects with proper indentation and colors
...
实际上有点整洁。