我怎样才能弄清楚在我的rails应用程序中生成所有这些额外的sqlite3选择的位置?

rad*_*und 5 sqlite profiling ruby-on-rails

我试图找出我的rails应用程序生成一堆额外查询的位置.我需要一些关于如何解决它的想法.或者,如果有人能给我一些提示,我将不胜感激.

我得到这些:

  SQL (1.0ms)    SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'

  SQL (0.8ms)    SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'

  SQL (0.8ms)    SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'
Run Code Online (Sandbox Code Playgroud)

每次向DB请求时反复重复(单次请求多达70次)

我尝试安装一个跟踪查询源的插件,但它确实没有任何帮助.我正在使用hobofields gem,dunno如果这就是它正在做的事情但我现在有点坚持它

有关追捕这些额外查询来源的任何提示?

cri*_*ian 3

看看第173行connection_adapters/sqlite_adapter.rb中的ActiveRecord gem(我使用的是ActiveRecord 3.0.7),你有一个名为tables的函数,它生成你发布的确切查询:

SELECT name FROM sqlite_master WHERE type = 'table' AND NOT name = 'sqlite_sequence'

在开发模式下,针对每个请求,数据库中的每个表都会调用此函数。在生产中,该函数仅在服务器启动时调用一次,并且结果被缓存。


在针对每个请求的开发过程中,rails 会查看您的数据库以查看每个表具有哪些列,以便它可以在您的模型上生成方法,例如“find_by_name”。由于在生产中数据库不太可能发生更改,rails 仅在服务器启动时进行此查找。