Ruby on rails Rails应用程序意外抛出错误
这真是一件奇怪的事。我可以去同一个页面三次,三次中有一次页面会抛出错误 这在rails应用程序中是常见的吗? 这是因为我在某个地方的缓存设置不正确造成的吗 我知道这里没有太多的背景,但我觉得这是很常见的事情 我不能完全复制粘贴我的整个应用程序 我的错误日志如下:Ruby on rails Rails应用程序意外抛出错误,ruby-on-rails,ruby,Ruby On Rails,Ruby,这真是一件奇怪的事。我可以去同一个页面三次,三次中有一次页面会抛出错误 这在rails应用程序中是常见的吗? 这是因为我在某个地方的缓存设置不正确造成的吗 我知道这里没有太多的背景,但我觉得这是很常见的事情 我不能完全复制粘贴我的整个应用程序 我的错误日志如下: ActiveRecord::ConnectionTimeoutError (could not obtain a database connection within 5.000 seconds (waited 5.000 second
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(无法在5.000秒内(等待5.000秒)获得数据库连接) 这是数据库连接的一个问题:
- 试图加载太多数据(即在几秒钟内达到数据库1000多条记录)
- 具有极高的延迟(较慢)连接
- 系统上有太多打开的数据库连接(阻止加载更多连接)
解决此问题的方法是调试过程: - DB 您的数据库是如何托管的 我们使用一个共享主机来存储一些MYSQL数据库以供开发(我们喜欢保持精简的设置),并为生产应用程序提供现场数据库托管(相同的数据中心) 数据库服务器实际上就像请求JSON对象一样,这意味着如果您是从本地主机以外的系统请求它,则需要测量它返回的速度 您的问题可能是系统连接到数据库的时间太长,因此刷新可能会阻止它再次访问数据库。解决这个问题的唯一方法是获得一个地理位置接近的设置 我们以前在Heroku上遇到过这样的问题——使用外部MYSQL数据库大大降低了系统的速度:) 使用RackSpace之类的工具可以连接到位于同一数据中心的数据库服务器 - 数据集 从上面开始,您可能遇到的第二个问题是,您正在调用大量数据 记住,db服务器只是一台计算机,用数据回答您的请求 因此,如果您在一次调用中调用了大量数据,则处理这些数据所需的时间将非常长(防止进一步的请求被处理) 您需要现实地处理数据请求—我们倾向于在一次调用中保留100个对象,您必须避免类似瘟疫的情况 - 池大小 最后,数据库连接的池大小是另一个需要考虑的问题 您可以在此处阅读:
简而言之,您应该将db连接限制在应用程序所需的范围内。任何多余的错误都会导致问题。这不是Rails错误: ActiveRecord::ConnectionTimeoutError(无法在5.000秒内(等待5.000秒)获得数据库连接) 这是数据库连接的一个问题:
- 试图加载太多数据(即在几秒钟内达到数据库1000多条记录)
- 具有极高的延迟(较慢)连接
- 系统上有太多打开的数据库连接(阻止加载更多连接)
解决此问题的方法是调试过程: - DB 您的数据库是如何托管的 我们使用一个共享主机来存储一些MYSQL数据库以供开发(我们喜欢保持精简的设置),并为生产应用程序提供现场数据库托管(相同的数据中心) 数据库服务器实际上就像请求JSON对象一样,这意味着如果您是从本地主机以外的系统请求它,则需要测量它返回的速度 您的问题可能是系统连接到数据库的时间太长,因此刷新可能会阻止它再次访问数据库。解决这个问题的唯一方法是获得一个地理位置接近的设置 我们以前在Heroku上遇到过这样的问题——使用外部MYSQL数据库大大降低了系统的速度:) 使用RackSpace之类的工具可以连接到位于同一数据中心的数据库服务器 - 数据集 从上面开始,您可能遇到的第二个问题是,您正在调用大量数据 记住,db服务器只是一台计算机,用数据回答您的请求 因此,如果您在一次调用中调用了大量数据,则处理这些数据所需的时间将非常长(防止进一步的请求被处理) 您需要现实地处理数据请求—我们倾向于在一次调用中保留100个对象,您必须避免类似瘟疫的情况 - 池大小 最后,数据库连接的池大小是另一个需要考虑的问题 您可以在此处阅读:
简而言之,您应该将db连接限制在应用程序所需的范围内。任何多余的线程都会导致问题。不,这不是常见的情况。哦,这很可怕。您可能会因为线程太多(如果您使用的是线程服务器,如Puma)和连接池太小而耗尽数据库连接池。请发布你的
数据库.yml
和你的Rails服务器配置。这也会帮助你加载什么页面。控制器代码和模板可能会有所帮助。不可能重复,这不是常见的情况。哦,这很可怕。您可能会因为线程太多(如果您使用的是线程服务器,如Puma)和连接池太小而耗尽数据库连接池。请发布你的数据库.yml
和你的Rails服务器配置。这也会帮助你加载什么页面。C