【问题标题】:How can I tell if a vendored gem is being used?如何判断是否正在使用出售的 gem?
【发布时间】:2013-03-05 19:29:19
【问题描述】:

我继承了一个以前由多个开发人员传递的旧项目。它的形状很糟糕,所以我正试图让它恢复生机。我注意到有一些 gems 和 libs 已被出售到项目中,但无法判断它们是否正在被使用或什么!

如果项目不再使用其中一些 gem,我该如何锻炼?

【问题讨论】:

  • 删除它们,看看是否有任何损坏
  • @NickGinanto 我希望有更优雅的方式。
  • 我知道的唯一另一种方法是查看代码是否以困难的方式使用这些 gem。. 在代码中手动搜索 gem 的核心内容
  • 答案可能是“否”,但无论如何,该应用程序是否有一个好的测试套件?如果是,那么通过确保测试套件仍然运行,可以更轻松地自信地删除内容。

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 rubygems


【解决方案1】:

有一些简单的技巧可以帮助您做到这一点。例如,您可以将 puts caller i 放在 gems 的根文件中,看看它们是否从某个地方被调用。

您还可以使用 ruby​​ 内置的跟踪功能,例如:http://apidock.com/ruby/Kernel/set_trace_func

或使用外部跟踪工具。

【讨论】:

    【解决方案2】:

    检查这一点的一种便捷方法是使用 REPL。我建议安装pry-rails gem,它将简单地用更强大的Pry REPL 替换默认的rails 控制台(IRB)。

    #Gemfile
    
    group :development do
      pry-rails
    end
    

    运行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 的内联help 系统:

       help show-source
    

    或查看 Pry wiki 上的 Source browsing 页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      相关资源
      最近更新 更多