我有一个网站由于内存溢出而被关闭。它是在来自用户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
3条答案
按热度按时间9rnv2umw1#
这些库与Rails应用不在同一个目录中,它们将位于Ruby版本所在的任何位置,这取决于您安装它所使用的版本管理器。
Rails文档可以在http://api.rubyonrails.org/上找到,或者你可以使用像pry-byebug这样的gem在执行过程中进入方法,因为Ruby是面向对象的,并且使用继承链来找到响应给定消息的对象,这是真正知道在应用程序执行过程中的任何给定点调用了哪个方法的最好方法。
将
gem 'pry-byebug'
添加到gemfile,捆绑安装,然后在update方法的顶部插入binding.pry
。一旦执行暂停,您可以轻松地进入该方法。vyswwuz22#
您可以使用byebug gem来查看方法中每一步发生了什么。
olqngx593#
正如其他人所说,您应用中的代码并不是正在运行的完整代码集,因此
grep
在这里无法工作。您还可能遇到同一方法被多次定义的问题,grep
在这方面也帮不上忙。我找到的最好的解决方案是使用
pry
,它看起来像是一个Rails项目,所以你可以通过添加以下内容到你的Gemfile中来最容易地得到结果:在这一点上,世界是你的牡蛎。
开始学习如何使用它的最简单方法是在代码执行中你想探索的地方添加一个
binding.pry
,然后在测试或开发环境中运行代码,服务器会停止并在该行给予你一个控制台,然后你只需要show-source update!
,你就会看到方法定义的地方。第一步,使用
pry
并探索它的许多plugin libraries。第二步是在文本编辑器中试用
solargraph
,它没有pry
强大,但是它可以帮助您轻松地跳转到项目中的方法定义。第3步:查看高级文本编辑器RubyMine,因为它支持这类功能以及更多功能,尽管它不是免费的。https://www.jetbrains.com/help/ruby/getting-started.html