gpt4 book ai didi

ruby-on-rails - ActiveRecord::lock! 引发了什么样的异常?

转载 作者:行者123 更新时间:2023-12-04 14:42:27 29 4
gpt4 key购买 nike

我正在使用锁!在我的代码中,想捕获锁定时抛出的异常!由于某种原因失败(例如无法获得锁)。什么样的异常都可以加锁!扔?我检查了 ruby​​ 文档,但找不到特定的异常类。

谢谢。

最佳答案

如有疑问,请进行探究。

考虑下面的一对函数:

def long_hold
ActiveRecord::Base.transaction do
u = User.find(220)
u.lock!
sleep 100.seconds
u.email="foo@bar.com"
u.save!
end
end

def short_hold
ActiveRecord::Base.transaction do
u = User.find(220)
u.lock!
u.email="foo@bar.com"
u.save!
end
end

在我的设置中(OSX 10.11、ruby 2.2.4、rails 4.2、postgres 9.5),在一个 rails 控制台中运行 long_hold,然后在第二个控制台中运行 short_hold ,我观察到 short_hold block ,直到 long_hold 完成;此外,使用 put 检测代码,我们看到当 long_hold 处于休眠状态时,short_hold 正在等待获取锁。

假设没有关于 Rails 控制台独立性的警告,这表明如果第二个进程试图锁定已经锁定的行,则不会抛出异常,但该进程阻塞直到第一个完成。

关于ruby-on-rails - ActiveRecord::lock! 引发了什么样的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6309900/

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