【问题标题】:How to see the source code for an "update!' method如何查看“更新!”的源代码方法
【发布时间】:2023-03-18 17:42:01
【问题描述】:

我有一个网站由于内存溢出而被终止。它在来自用户 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

我的环境: $ 导轨--版本 导轨 3.2.22.5 $红宝石--版本 红宝石 1.9.3p551

【问题讨论】:

  • 你用的是什么文本编辑器?
  • activerecord/lib/active_record/persistence.rb,也许你想挖掘一下你当前的 Rails 版本。
  • 我正在使用我的客户站点上安装的内容 (sublime/textedit)
  • 我怀疑activerecord/lib/active_record/persistence.rb 定义了该更新!我们正在寻找。因为我们在控制器的上下文中,而活动记录是不同的上下文(模型)

标签: ruby debugging memory-leaks introspection


【解决方案1】:

这些库与您的 Rails 应用程序不在同一目录中,它们将位于您的 Ruby 版本所在的任何位置,具体取决于您安装它时使用的版本管理器。

Rails 文档在线http://api.rubyonrails.org/,或者您可以使用像 pry-byebug 这样的 gem 在执行期间单步执行该方法。由于 Ruby 是面向对象的,并且使用继承链来查找响应给定消息的对象,因此这是真正了解在应用程序执行的任何给定点调用哪个方法的最佳方式。

gem 'pry-byebug' 添加到您的gemfile,捆绑安装,然后在更新方法的顶部插入binding.pry。一旦执行暂停,您就可以轻松地进入该方法。

【讨论】:

    【解决方案2】:

    您可以使用 byebug gem 查看方法中每个步骤发生的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-09
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2022-01-10
      • 2017-04-12
      • 2011-03-01
      相关资源
      最近更新 更多