ruby 如何查看“update!”方法的源代码

mbjcgjjk  于 2022-12-29  发布在  Ruby
关注(0)|答案(3)|浏览(210)

我有一个网站由于内存溢出而被关闭。它是在来自用户Web浏览器的PUT请求期间触发的。不幸的是,日志在这种情况下没有帮助。我已经将问题追溯到以下方法定义:

# app/controllers/registrations/profiles_controller.rb
  def update
    update! do |success, failure|
      success.html { redirect_to edit_registration_diagnosis_path }
      failure.html do
        build_diagnosis
        render 'edit'
      end
    end
  end

我想看看这个update!方法的源代码,我怎么让ruby或者rails或者bash/grep给我看这个源代码呢?
我试过:

git grep 'def update!'  # no results

My env: $ rails --version Rails 3.2.22.5 $ ruby --version ruby 1.9.3p551

9rnv2umw

9rnv2umw1#

这些库与Rails应用不在同一个目录中,它们将位于Ruby版本所在的任何位置,这取决于您安装它所使用的版本管理器。
Rails文档可以在http://api.rubyonrails.org/上找到,或者你可以使用像pry-byebug这样的gem在执行过程中进入方法,因为Ruby是面向对象的,并且使用继承链来找到响应给定消息的对象,这是真正知道在应用程序执行过程中的任何给定点调用了哪个方法的最好方法。
gem 'pry-byebug'添加到gemfile,捆绑安装,然后在update方法的顶部插入binding.pry。一旦执行暂停,您可以轻松地进入该方法。

vyswwuz2

vyswwuz22#

您可以使用byebug gem来查看方法中每一步发生了什么。

olqngx59

olqngx593#

正如其他人所说,您应用中的代码并不是正在运行的完整代码集,因此grep在这里无法工作。您还可能遇到同一方法被多次定义的问题,grep在这方面也帮不上忙。
我找到的最好的解决方案是使用pry,它看起来像是一个Rails项目,所以你可以通过添加以下内容到你的Gemfile中来最容易地得到结果:

# Gemfile
gem "pry-rails"
gem "pry-doc"

在这一点上,世界是你的牡蛎。
开始学习如何使用它的最简单方法是在代码执行中你想探索的地方添加一个binding.pry,然后在测试或开发环境中运行代码,服务器会停止并在该行给予你一个控制台,然后你只需要show-source update!,你就会看到方法定义的地方。
第一步,使用pry并探索它的许多plugin libraries
第二步是在文本编辑器中试用solargraph,它没有pry强大,但是它可以帮助您轻松地跳转到项目中的方法定义。
第3步:查看高级文本编辑器RubyMine,因为它支持这类功能以及更多功能,尽管它不是免费的。https://www.jetbrains.com/help/ruby/getting-started.html

相关问题