- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我们正在升级 Sinatra来自ActiveRecord 4的申请到 ActiveRecord 5。以前我们有这一行:
使用 ActiveRecord::ConnectionAdapters::ConnectionManagement
这是因为连接在请求完成后没有被清理。这是关于此主题的先前 SO 讨论:
从 ActiveRecord 5 开始,这条线不再有效。这conversation in the rails project states :
This was removed in favor of Executor and Reloader APIs. That middleware that was removed were not part of the public API. If you want to use that outside Rails you need to make one.
这是否意味着,如果有人要将 ActiveRecord 5 与 Sinatra 一起使用,除非开发人员重新创建现在已删除的中间件,否则连接将在请求后再次“泄漏”或未返回到池中?
在 Sinatra 示例中,是否因此需要在 ActiveRecord 5 中包含这一行?
after do
ActiveRecord::Base.clear_active_connections!
end
这是链接到线程的含义,但我想得到一个明确的答案,我可以带回我的开发团队。
最佳答案
你是对的,ConnectionManagement
中间件已从 ActiveRecord 5 (PR #23807) 中删除,因此在 Rails 之外设置 ActiveRecord 时需要复制类似的功能。有几种方法可以做到这一点:
ConnectionManagement
机架中间件ConnectionManagement
class不是很复杂。您可以将实现复制并粘贴到本地应用程序的某处,并像往常一样将其包含到您的 Rack 中间件堆栈中:
class ConnectionManagement
def initialize(app)
@app = app
end
def call(env)
testing = env['rack.test']
status, headers, body = @app.call(env)
proxy = ::Rack::BodyProxy.new(body) do
ActiveRecord::Base.clear_active_connections! unless testing
end
[status, headers, proxy]
rescue Exception
ActiveRecord::Base.clear_active_connections! unless testing
raise
end
end
use ConnectionManagement
after
hook在 Sinatra 应用程序中,您建议的 block 应该有效:
after do
ActiveRecord::Base.clear_active_connections!
end
注意这也是方法currently used通过sinatra-activerecord
集成 gem 以支持 ActiveRecord 5(请参阅问题 #73)。
ActionDispatch::Executor
机架中间件最后,您可以使用 Rails 现在用于 ActiveRecord 连接管理的相同代码,方法是将 ActionDispatch::Executor
添加到您的 Rack 中间件堆栈,并调用 ActiveRecord::QueryCache#install_executor_hooks
插入用于清除 ActiveRecord 连接的 Hook :
require 'action_dispatch/middleware/executor'
use ActionDispatch::Executor, ActiveSupport::Executor
ActiveRecord::QueryCache.install_executor_hooks
关于ruby-on-rails - 替换 ActiveRecord 5 中的 ActiveRecord::ConnectionAdapters::ConnectionManagement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41400202/
我目前正在开发一个 sinatra 应用程序,我在 postgresql 与 sinatra 的连接方面遇到了问题,我尝试执行此命令: rake db:create 创建数据库但它抛出此错误。 C:\
我是 Ruby on Rails 的新手,但我已经学习了一些教程并且对自己的方法有了一些了解。我已经生成了一些脚手架并将数据插入到 MySql 数据库中。 导航到 index.html.erb 时,我
当我尝试运行迁移时,我收到以下信息: NoMethodError: undefined method `column' for # 这是迁移代码: class CreateAdvertisement
我已经使用 postgres 数据库创建了一个 Rails 应用程序。我正在使用 postgis 扩展进行地理查询。该应用程序在我的开发(本地)机器上成功运行,但是在我运行 heroku run ra
我有一个 Rails 5.1 应用程序,它使用 Devise 处理我的 User 模型的身份验证。这个应用程序有一个 Oracle 数据库后端,需要在执行任何查询之前为登录用户设置一个系统上下文变量,
生成了 rails 4.2.0 应用程序并添加了 activerecord-postgis-adapter 并相应地编辑了 database.yml 文件。 但是现在当我这样做时rake db:cre
我在运行 Rails 服务器时遇到问题。我在初始化程序中设置了 abstract_mysql2_adapters,包括: class ActiveRecord::ConnectionAdapters:
有两个应用程序。其中一个应用程序正在使用 rails 4.1.2。另一个应用程序正在使用 rails 5.0.1。以下是 rails 5 应用程序的工作方式:它检查用户是否已登录: 如果用户已登录:那
我目前正在将一个 Rails 项目从 v5.2.3 升级到 v6.0。我正在关注 guide升级 rails 。但我只停留在第一步。一旦我更改了 gemfile 中的 rails 版本并更新了 rai
我在基于测验的小型应用程序中使用 Active Admin gem。但是当我执行 耙数据库:迁移它给了我错误。以下是该命令的跟踪: $ rake db:migrate RAILS_ENV=produc
我们正在升级 Sinatra来自ActiveRecord 4的申请到 ActiveRecord 5。以前我们有这一行: 使用 ActiveRecord::ConnectionAdapters::Con
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我们正在从 5.2 升级我们的 rails 应用程序至 6.0.1 ,现在每当我们运行 db:schema:load --trace我们得到以下错误。 ** Invoke db:schema:load
当我尝试通过 Rails 控制台更新 Puzzle 对象的 User 对象时,我得到一个数据库 ROLLBACK 并在开发中出现此错误: 类型错误:无法转换 ActiveRecord::Connect
我是一名优秀的程序员,十分优秀!