Rails 在 Rails 里使用了 Parellel (多进程) 后出现的奇葩问题

chalvern · 2017年09月14日 · 最后由 pynix 回复于 2017年09月30日 · 1121 次阅读

最近开发中出现一个奇葩场景。

场景

Redmine 中,目前有几十个 issue,每个 issue 都需要修改状态,因为每个 issue 都是数据独立的,所以想把修改这件事放到多个进程中去做,充分利用一下硬件资源嘛。

使用了 Gem Parallel

Parallel.each(@issues, in_processes: 4) do |issue|
  do-something, including mails delivering
ene

ps: 每个 issue 修改并保存成功,会发出一封邮件。

遇到的两个问题

  1. 相应的单元测试中,监控不到发送邮件的正确数目,目前 ActionMailer::Base.deliveries.count 的值恒为 0,推测:测试进程里的 ActionMailer::Base.deliveries 和业务逻辑里的 ActionMailer::Base.deliveries 是独立的……手工验证确实是这样的,,那么问题来了: 这种情况应该怎么写测试用例呢?

  2. 单元测试,理论上每运行完都会运行相应的 rollback ,保证数据库的纯正。目前发现,上面的数据是会保留的,从而干扰了一些正常的测试。。。 这种情况是不是有方法解决呢?

为毛不是开多个 webserver worker 呢?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号