2023-10-13 03:08PM
1. 在 Gemfile 文件中增加 bullet
gem "bullet"
也可以这样:
gem 'bullet', group: 'development'
运行:
bundle install
使用generate命令启用Bullet gem:
bundle exec rails g bullet:install
2. 启动服务器:
bunlde exec rails server
3. 在浏览器打开 http://localhost:3000/enterprise_personnels 会发现一个弹出警报框,上面写着:
user: meiyi
# 它使用了"eager loading"(急切加载)的技术来提高数据库查询的效率。
USE eager loading detected
EnterprisePersonnel => [:enterprise]
Add to your query: .includes([:enterprise])
Call stack
/home/meiyi/workspace/baogongpingtai-pc/app/views/enterprise_personnels/_manager_index.html.erb:52:in `block in _app_views_enterprise_personnels__manager_index_html_erb___1641263257495167126_98180'
/home/meiyi/workspace/baogongpingtai-pc/app/views/enterprise_personnels/_manager_index.html.erb:45:in `_app_views_enterprise_personnels__manager_index_html_erb___1641263257495167126_98180'
/home/meiyi/workspace/baogongpingtai-pc/app/views/enterprise_personnels/index.html.erb:4:in `_app_views_enterprise_personnels_index_html_erb__848786211981055623_98160'
这意味着从 Enterprise_personnels 对象到它的 enterprise 关联有一个 N+1 查询。
并且在浏览器页面的左下角会显示一个警告:
4. 与此同时,有一个日志附加到 log/bullet.log
文件:
user: meiyi
GET /enterprise_personnels
USE eager loading detected
EnterprisePersonnel => [:enterprise]
Add to your query: .includes([:enterprise])
Call stack
/home/meiyi/workspace/baogongpingtai-pc/app/views/enterprise_personnels/_manager_index.html.erb:52:in `block in _app_views_enterprise_personnels__manager_index_html_erb___1641263257495167126_98180'
/home/meiyi/workspace/baogongpingtai-pc/app/views/enterprise_personnels/_manager_index.html.erb:45:in `_app_views_enterprise_personnels__manager_index_html_erb___1641263257495167126_98180'
/home/meiyi/workspace/baogongpingtai-pc/app/views/enterprise_personnels/index.html.erb:4:in `_app_views_enterprise_personnels_index_html_erb__848786211981055623_98160'
5. 要修复 N+1 查询,可以更改 app/controllers/enterprise_personnels_controller.rb 文件:
def index
# 增加下面这一行
@enterprise_personnels = EnterprisePersonnel.includes(:enterprise)
@car_count = current_manager.cars.count
……
end
6. 在浏览器刷新 http://localhost:3000/enterprise_personnels 页面,会发现,现在没有警报框,日志中也没有新内容。
所以 N+1 查询已修复
登录
请登录后再发表评论。
评论列表:
目前还没有人发表评论