Ruby on rails 配置rails控制器操作

Ruby on rails 配置rails控制器操作,ruby-on-rails,ruby,Ruby On Rails,Ruby,在RubyonRails中评测控制器操作的最佳方法是什么。目前,我正在使用蛮力方法投入投入时间。现在,在我认为会成为瓶颈的两个调用之间进行调用。但那感觉真的,真的很脏。必须有更好的方法。使用基准标准库和Rails中提供的各种测试(单元、功能、集成)。下面是一个例子: def test_do_something elapsed_time = Benchmark.realtime do 100.downto(1) do |index| # do something here

在RubyonRails中评测控制器操作的最佳方法是什么。目前,我正在使用蛮力方法投入
投入时间。现在,
在我认为会成为瓶颈的两个调用之间进行调用。但那感觉真的,真的很脏。必须有更好的方法。

使用基准标准库和Rails中提供的各种测试(单元、功能、集成)。下面是一个例子:

def test_do_something
  elapsed_time = Benchmark.realtime do
    100.downto(1) do |index|
      # do something here
    end
  end
  assert elapsed_time < SOME_LIMIT
end
def test\u do\u
已用时间=基准。实时do
100.下至(1)do |指数|
#在这里做点什么
结束
结束
断言已用\u时间<某些\u限制
结束
所以在这里,我们只需做100次,通过基准库对其计时,并确保所用时间少于某个时间限制


您还可能发现以下链接很有用:和。另外,如果你喜欢“读书”,我从中得到了这个例子的想法,它讨论了所有不同的测试类型,并介绍了一些性能测试。

有一个关于评测的Railscast,非常值得一看


您可能想尝试一下这项服务,因为它确实令人印象深刻。免责声明:我与FiveRuns没有任何关联,我只是试用了这项服务

TuneUp是一项免费服务,您可以下载一个插件,当您运行应用程序时,它会在屏幕顶部插入一个面板,可以扩展该面板以显示详细的性能指标

它提供了一些很好的图表,其中一个显示了在模型、视图和控制器中花费的时间比例。如果需要,您甚至可以向下钻取查看ActiveRecord正在执行的各个SQL查询,它还可以通过再次单击显示底层数据库模式


最后,您可以选择将您的评测数据上传到FiveRuns站点,以进行社区性能分析和建议。

我不久前学会了这项技术,发现它非常方便

当它就位时,您可以将
?profile=true
添加到任何命中控制器的URL。您的操作将照常运行,但它不会将呈现的页面发送到浏览器,而是发送一个详细的、格式良好的ruby prof页面,显示您的操作在哪里花费了时间

首先,将ruby prof添加到您的Gemfile中,可能在开发组中:

group :development do
    gem "ruby-prof"
end
然后向应用程序控制器添加:

around_action :performance_profile if Rails.env == 'development'

def performance_profile
  if params[:profile] && result = RubyProf.profile { yield }

    out = StringIO.new
    RubyProf::GraphHtmlPrinter.new(result).print out, :min_percent => 0
    self.response_body = out.string

  else
    yield
  end
end
阅读ruby prof的输出是一门艺术,但我将把它作为练习

ScottJShea的补充说明: 如果要更改测量类型,请放置以下位置:

RubyProf.measure_mode=RubyProf::GC_TIME#示例


在应用程序控制器的配置文件方法中的
if
之前。您可以在上找到可用测量值的列表。在撰写本文时,内存和分配数据流似乎已损坏()。

这在Rails 4.2.6中起作用:

    o=OpenStruct.new(logger: Rails.logger)
    o.extend ActiveSupport::Benchmarkable
    o.benchmark 'name' do
      # ... your code ...
    end

这个答案告诉您如何确保您的操作运行得足够快。它不能帮助您进行分析,即找出操作的哪一部分花费的时间最多。对于任何想要粘贴它的人,您还需要在应用程序控制器的顶部添加“require'ruby prof'”。另外,对于我来说,我不得不将“self.response_body=”改为“self.response.body=”(Rails 2.3.14),感谢这些调整<代码>响应\u body添加到Rails 3.0中。如果您使用的是bundler,则不需要ruby prof,但我很高兴这项技术能够很好地适应较旧版本的Rails。我也在使用rails 2.3.14,但很难让它正常工作。我在graph_html_printer.rb:98:in'full_name'中得到了“错误数量的参数(0代表1)”,无论我安装的是哪个版本的ruby prof。知道是什么原因导致的吗?要使其覆盖JSON、XML等的返回格式,请将其添加到if语句:
headers[“Content Type”]=“text/html”
链接已断开(DNS已过期)。这不会在日志或其他地方显示任何内容。