在gemfile中描述宝石目的的宝石?

时间:2014-10-28 15:14:15

标签: ruby-on-rails ruby gem gemfile

我是RoR的新手,并且正在进入一个大型的RoR项目。该项目使用了一堆宝石。实际上,Gemfile.lock文件(包括依赖项)长度为460行。有人告诉我,该项目经历了几个不同的开发人员,并且那里可能存在很多问题。

有没有办法生成每个宝石的列表?它并不完全直观,特别是像“capybara”,“cocaine”和“raindrops”这样的名字。

  1. 是否有任何简单的过程来确定需要哪些宝石?

2 个答案:

答案 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
...
实际上有点整洁。