我有一个简单的Rails控制器,它不依赖于数据库.
class PingController < ActionController::Base def ping render text: 'The service is up' end end
解决方法
我认为可能有三个罪魁祸首.
use Rack::Sendfile use Actiondispatch::Static use Rack::Lock use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware:0x000000029a0838> use Rack::Runtime use Rack::Methodoverride use Actiondispatch::RequestId use Rails::Rack::Logger use Actiondispatch::ShowExceptions use Actiondispatch::DebugExceptions use Actiondispatch::RemoteIp use Actiondispatch::Reloader use Actiondispatch::Callbacks use ActiveRecord::Migration::CheckPending use ActiveRecord::ConnectionAdapters::ConnectionManagement use ActiveRecord::QueryCache use Actiondispatch::Cookies use Actiondispatch::Session::CookieStore use Actiondispatch::Flash use Actiondispatch::ParamsParser use Rack::Head use Rack::ConditionalGet use Rack::ETag run Rails.application.routes
对你的控制器的每一个要求基本上都是通过链中的每个这些中间件,一个接一个地传递出来.
其中三个与数据库相关,因此依赖于每个请求的数据库.你会注意到它们都是ActiveRecord的一部分,这是数据库涉及到的一个很大的缺点.
> ActiveRecord :: Migration :: CheckPending
这将在通过请求之前检查数据库中是否有挂起的迁移.从我可以看到源代码,它检查所有环境中的待处理迁移.
> ActiveRecord :: ConnectionAdapters :: ConnectionManagement
除了在测试环境中,这个中间件清除每个请求的活动数据库连接.也许这个中间件中的数据库连接可能会阻止您的控制器操作.
> ActiveRecord :: QueryCache
这也可能是阻止数据库请求.对于所有环境,我可以告诉我们.
原文地址:https://www.jb51.cc/ruby/271454.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。