Debug Gem

以 devise 为例,有些时候我们需要调试或者检查一下 gem 中的方法是如何工作的。

方法 1

rails g devise:views 生成出 Devise 的 views,并修改 devise/registrations/new.html.erb

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <% if resource.errors.any? %>
  <ul>
    <% resource.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
  </ul>
  <% end %>

方法 2 Inspecting Ruby Gems

  1. 查看 Gemfile.lock 中 devise 的版本
  2. git clone git@github.com:plataformatec/devise.git 然后进入 devise 目录并 checkout 到对应版本分支
  3. 在 Gemfile 中指定 gem 的 path 路径,并再次执行 bundle
gem 'devise', path: "~/projects/devise"

现在你可以自己在其中添加一些代码和断点之类的。

方法 3 Accessing the gem in its own path

$ bundle show grape
# /Users/myuser/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/grape-1.0.2

This will point to the version we already have in Gemfile.lock, so you don’t need to worry about the version.

# ~/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/grape-1.0.2/lib/grape/dsl/parameters.rb
def requires(*attrs, &block)
  binding.pry
  # method implementation..
  # resource.inspect 之类的也没问题
end

利用 pry

有时候找不到具体的文件和方法,那可以使用 pry 提供的一些方法。具体自己查吧。

show-doc obj
show-source obj
edit obj

obj can be a variable referencing an instantiated class, or the constant to a class or module itself.

相关链接

如果觉得我的文章对您有用,请在支付宝公益平台找个项目捐点钱。 @Victor Mar 22, 2018

奉献爱心