【问题标题】:Rails thread sleep after saving record保存记录后 Rails 线程休眠
【发布时间】:2018-05-25 18:49:33
【问题描述】:

当我尝试调用record.save!在线程内部,线程休眠。我需要使用线程进行 rspec 测试。

a = Thread.new do
  t = User.find(1)
  t.role = 2
  t.save!
end

这是我在控制台中收到的输出

Thread:0x007fe1d68d9978@(pry):125 sleep [32] pry(main)> 用户负载 (8.5ms) SELECT users.* FROM users WHERE users.id = 1 限制 1 (0.1ms) 开始 (0.2ms) 提交

【问题讨论】:

  • RSpec 为什么需要线程?你想达到什么目标?您的测试结果如何?
  • 看来角色已经设置为2,所以没有进行更新

标签: ruby-on-rails ruby multithreading activerecord


【解决方案1】:

你没有在线程上调用join。你需要在某个地方调用a.join,以便让主进程知道运行你的线程。

来自文档...

然后我们可以暂停主线程的执行并允许我们的新线程完成,使用连接。如果我们在主线程终止之前不调用join,那么所有其他线程都会被杀死。

【讨论】:

  • 看来这不是我的问题。我有一个 .with_lock 在我的线程中运行,导致这种情况发生 Mysql2::Error: Lock wait timeout exceeded;尝试重启事务:
猜你喜欢
  • 2011-12-16
  • 2011-03-05
  • 2018-08-03
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
相关资源
最近更新 更多