我正在使用RoR版本4.2.3,并且我明白我可以设置我的交易的隔离级别。但是,我在哪里定义设置所有事务的隔离级别?所以我只需要定义一次,然后不用担心呢?如何设置我所有铁路交易的隔离级别
我使用PostgreSQL作为我的数据库
我正在使用RoR版本4.2.3,并且我明白我可以设置我的交易的隔离级别。但是,我在哪里定义设置所有事务的隔离级别?所以我只需要定义一次,然后不用担心呢?如何设置我所有铁路交易的隔离级别
我使用PostgreSQL作为我的数据库
似乎有没有成为一个全球性的隔离选项
,所以你只剩下四个选项:
transaction
实施,使它挑选您想要的隔离级别的 。 (Monkeypatching不可取)在整个应用程序中使用正确的isolation
级别。
SomeModel.transaction(isolation: :read_committed)
扩展ActiveRecord
,并创建自己的自定义交易方法。
正如评论 - 您可能能够编辑数据库配置中的默认隔离级别。 Postgres的是this one
示例代码:
#lib/activerecord_extension.rb
module ActiveRecordExtension
extend ActiveSupport::Concern
module ClassMethods
def custom_transaction
transaction(isolation: :read_committed) do
yield
end
end
end
end
ActiveRecord::Base.send(:include, ActiveRecordExtension)
然后在您的初始化:
#config/initializers/activerecord_extension.rb
require "active_record_extension"
之后,您可以使用:
MyModel.custom_transaction do
<...>
end
而在未来,这将允许您可以在一个地方更改隔离级别。
你可以还要为数据库服务器设置默认的事务隔离级别。编辑postgresql.conf;寻找default_transaction_isolation。这会影响该服务器下的所有数据库。一方面,你不能获得比这更多的全球化。另一方面,更改此设置不适用于大多数人。 –
Rails不支持设置全局隔离级别,但Postgres允许您为会话设置一个。你可以勾起Rails的连接建立来每次连接时运行一个命令,认为这些技术都依赖monkeypatching,可能是有问题的。
然后配置你的隔离级别:
SET SESSION CHARACTERISTICS AS TRANSACTION transaction_mode
虽然这是有趣的,我会用更多的东西一样Magnuss's answer可维护性和理智去。
我相信这是一个重复的http://stackoverflow.com/questions/29583303/how-to-set-a-ruby-on-rails-4-apps-default-db-isolation-level – phylae