【问题标题】:Rails questions, SQL statement in logsRails 问题,日志中的 SQL 语句
【发布时间】:2010-07-13 18:08:00
【问题描述】:

所以我是 Rails 新手,所以请原谅这个基本问题。

我看到 rails 对于我向控制器发出的每个请求(在控制台中)都会吐出这个。为什么?我什至没有做任何数据库操作,我只是开始编写一个 HelloWorld rails 应用程序。在创建这个 rails 项目时,我确实选择了 mysql 作为数据库(rails -d mysql helloworld)

SQL (0.1ms)   SET NAMES 'utf8'
SQL (0.1ms)   SET SQL_AUTO_IS_NULL=0

所以我注意到,无论您是否执行 DB/ActiveRecord 操作,rails 都会尝试为每个请求建立数据库连接。它在执行 action_controller/dispatch 之后立即执行此操作。这对我来说似乎是在浪费 DB 资源,为什么我什至可能不会进行 ActiveRecord 操作时建立与 DB 的连接??

【问题讨论】:

  • +1 我也对答案感兴趣

标签: sql mysql ruby-on-rails


【解决方案1】:

您在每个请求中都会看到此内容,因为您处于开发模式。在生产模式下(或打开类缓存),这只发生一次,当连接被添加到连接池时。

【讨论】:

  • 所以这就是我所做的 - 我在我的 env/development.rb 中更改了 config.cache_classes=true 并且我没有像你所说的那样在每个请求上看到上述 SQL 输出。但我还尝试了另一件事——在运行几个 helloworld 控制器请求后停止 mysql 实例。 stoppng mysql 后,helloworld 控制器请求抱怨它无法连接到mysql,这是我的原点。当我什至不需要它时,这似乎浪费了 CPU 周期来检查连接。不想引发激烈的战争 :) 但这似乎是 rails 的设计缺陷?
  • 这当然是一个设计决策,有些人会支持,有些人会称之为缺陷:) 注意:如果您的应用程序中根本不需要 activerecord,您可以在环境中禁用它.rb 文件,但除此之外,我认为您对此感到困惑。这是一个非常微不足道的开销,但是是的,它对任何给定的请求都可能毫无意义。
猜你喜欢
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 2018-11-08
  • 2011-09-12
  • 2015-02-25
  • 1970-01-01
相关资源
最近更新 更多