【问题标题】:Is instance.attribute_name and instance[:attribute_name] exactly the same for sequel model attribute (db column)?续集模型属性(db 列)的 instance.attribute_name 和 instance[:attribute_name] 是否完全相同?
【发布时间】:2018-11-19 08:10:06
【问题描述】:

我使用 Rails 5.1.4、Sequel 5.9.0、Postgre、rack-mini-profiler(最新)、sequel-rails 1.0.1。

我正在尝试找出我的应用程序运行缓慢的原因。这是我发现的。

我做了一个简单的查询来获取帖子使用

@posts = Post.all

得到了~150。

我有一个部分来渲染它。这是简化的:

<% @posts.each do |post| %>
  <%= post.title %>
  <%= post.body %>
<% end %>

当我查看 rack-mini-profiler 的日志时,我看到了

SELECT NULL; 

请求会减慢渲染速度,但如果我将 . 方法更改为 :[]

<% @posts.each do |post| %>
  <%= post[:title] %>
  <%= post[:body] %>
<% end %>

NULL 查询消失,渲染变得更快。 (titlebody 都是我数据库中的字段,仅此而已。)

为什么?这是我需要知道的关于续集的事情吗?在这种情况下,我以后不应该使用instance.method,还是我遗漏了什么?

当我尝试来自控制台的请求时,我得到:

> Post.first
D, [2018-06-09T22:46:41.277269 #96772] DEBUG -- : (0.001008s) SELECT NULL
D, [2018-06-09T22:46:41.277952 #96772] DEBUG -- : (0.000362s) SELECT * FROM "posts" LIMIT 1

第一个幻像请求是什么?如何调试和删除它?

【问题讨论】:

  • 插件提供心跳以确保数据库连接处于活动状态。 DBM 经常关闭长时间运行的连接以保留可用的登录信息;发生这种情况时,您的应用程序将因连接断开而中断,因此应用程序会定期检查,以保持应用程序运行。您可以重新配置您的 DBM 以不这样做,但通常这是一个坏主意,因为您可以使用所有连接,这可能很糟糕。有心跳是件好事,select null 无需时间处理;这是一种非常标准的处理方式。

标签: ruby-on-rails ruby postgresql sequel sequel-gem


【解决方案1】:

终于找到问题了:

这是一个:connection_validator plugin

绕过这个插件,除非你真的需要它!

【讨论】:

  • 不要绕过它。了解它提供了什么,然后决定你是否不想要它。它提供的功能非常有用,不会导致任何减速或在其默认设置中产生负面结果,或者如果您已从默认设置正确配置它。
猜你喜欢
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
相关资源
最近更新 更多