gpt4 book ai didi

ruby-on-rails - Rails 应用程序意外抛出错误

转载 作者:太空宇宙 更新时间:2023-11-03 17:47:22 24 4
gpt4 key购买 nike

这真是一件奇怪的事情。我可以访问同一个页面 3 次,而这 3 次中有 1 次页面会抛出错误。

这在 Rails 应用程序中很常见吗?这是因为我在某处缓存设置不正确造成的吗?

我知道这里没有太多上下文,但我觉得这很常见。

我无法完全复制粘贴我的整个应用程序。

我的错误日志是这样的:

ActiveRecord::ConnectionTimeoutError (could not obtain a database connection within 5.000 seconds (waited 5.000 seconds)):
activerecord (4.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:189:in `block in wait_poll'
activerecord (4.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:180:in `loop'
activerecord (4.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:180:in `wait_poll'
activerecord (4.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:135:in `block in poll'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
activerecord (4.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:145:in `synchronize'
activerecord (4.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:133:in `poll'
activerecord (4.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:425:in `acquire_connection'
activerecord (4.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:349:in `block in checkout'
/usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'

最佳答案

这不是 Rails 错误:

ActiveRecord::ConnectionTimeoutError (could not obtain a database connection within 5.000 seconds (waited 5.000 seconds))

这是您的数据库连接问题:

  • 尝试加载过多数据(IE 在几秒钟内访问数据库 1000 多条记录)
  • 具有极高延迟(慢)的连接
  • 您的系统上有太多打开的数据库连接(阻止加载更多)

解决这个问题的方法是调试程序:

-

数据库

您的数据库是如何托管的?

我们使用共享主机来存储一些用于开发的 MYSQL 数据库(我们希望保持我们的设置精简),并为生产应用程序提供现场数据库托管(相同的数据中心)。

数据库服务器实际上就像请求 JSON 对象一样 -- SQL delivers "data" in XML ,这意味着如果您从本地主机以外的系统请求它,您需要测量它返回的速度/速度。

您的问题可能是您的系统连接到数据库的时间太长,因此刷新可能会阻止它再次访问它。解决此问题的唯一方法是获得地理位置接近的设置...

enter image description here

我们以前在 Heroku 上遇到过这个问题——使用外部 MYSQL 数据库会大大降低系统速度:)

使用 RackSpace 之类的东西可以让您连接到位于同一数据中心的数据库服务器...

enter image description here

-

数据集

根据上述内容,您可能遇到的第二个问题是您正在调用大量数据。

请记住,数据库服务器只是一台计算机,用数据响应您的请求。

因此,如果您在一次调用中调用大量数据,处理这些数据所需的时间将很长(阻止处理更多请求)。

您需要现实地对待您的数据请求 - 我们倾向于在一次调用中坚持处理 100 个对象,您必须避免 n+1 queries就像瘟疫一样。

-

池大小

最后,数据库连接的池大小是另一个考虑因素。

您可以在这里阅读:https://devcenter.heroku.com/articles/concurrency-and-database-connections

简而言之,您应该将数据库连接限制为您的应用程序需要的连接。任何多余的只会引起问题。

关于ruby-on-rails - Rails 应用程序意外抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33279342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com