Ruby on rails 我怎样才能知道是否正在使用一颗出售的宝石?
我继承了一个以前由多个开发人员传递的旧项目。它的状态不好,所以我想让它恢复生机。我注意到有一些gem和lib已经被出售到这个项目中,但是无法判断它们是否被使用或者是什么Ruby on rails 我怎样才能知道是否正在使用一颗出售的宝石?,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.1,rubygems,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.1,Rubygems,我继承了一个以前由多个开发人员传递的旧项目。它的状态不好,所以我想让它恢复生机。我注意到有一些gem和lib已经被出售到这个项目中,但是无法判断它们是否被使用或者是什么 如果这些宝石中的一些不再被项目使用,我该如何锻炼呢?有一些简单的技巧可以帮助你做到这一点。例如,您可以在gems的根文件中放置一个put调用者i,看看它们是否从某个地方被调用 您还可以使用ruby内置的跟踪功能,如: 或者使用外部跟踪工具。一种方便的检查方法是使用REPL。我建议安装gem,它将简单地用功能更强大的rails控制
如果这些宝石中的一些不再被项目使用,我该如何锻炼呢?有一些简单的技巧可以帮助你做到这一点。例如,您可以在gems的根文件中放置一个
put调用者i,看看它们是否从某个地方被调用
您还可以使用ruby内置的跟踪功能,如:
或者使用外部跟踪工具。一种方便的检查方法是使用REPL。我建议安装gem,它将简单地用功能更强大的rails控制台(IRB)取代默认的rails控制台
运行bundle install
,然后用bundle exec Rails c
启动Rails控制台。一旦进入Pry,就可以使用其内置的show source
命令查找实现了特定方法的位置。例如:
>> show-source ActiveRecord::Base.establish_connection
From: /home/andrea/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.12/lib/active_record/connection_adapters/abstract/connection_specification.rb @ line 128:
Owner: #<Class:ActiveRecord::Base>
Visibility: public
Number of lines: 11
def self.establish_connection(spec = ENV["DATABASE_URL"])
resolver = ConnectionSpecification::Resolver.new spec, configurations
spec = resolver.spec
unless respond_to?(spec.adapter_method)
raise AdapterNotFound, "database configuration specifies nonexistent # {spec.config[:adapter]} adapter"
end
remove_connection
connection_handler.establish_connection name, spec
end
或者在Pry的wiki上查看该页面 把它们拿走,看看有没有什么breaks@NickGinanto我希望会有一个更优雅的方法。我知道的唯一其他方法是看看代码是否以艰难的方式使用了这些宝石。。在代码中手动搜索gem的核心内容答案可能是“否”,但无论如何,应用程序是否有一个好的测试套件?如果是,那么通过确保测试套件仍然运行,可以更轻松地自信地删除内容。
>> show-source ActiveRecord::Base.establish_connection
From: /home/andrea/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.12/lib/active_record/connection_adapters/abstract/connection_specification.rb @ line 128:
Owner: #<Class:ActiveRecord::Base>
Visibility: public
Number of lines: 11
def self.establish_connection(spec = ENV["DATABASE_URL"])
resolver = ConnectionSpecification::Resolver.new spec, configurations
spec = resolver.spec
unless respond_to?(spec.adapter_method)
raise AdapterNotFound, "database configuration specifies nonexistent # {spec.config[:adapter]} adapter"
end
remove_connection
connection_handler.establish_connection name, spec
end
help show-source