【问题标题】:Access a value across all threads in rails application跨 Rails 应用程序中的所有线程访问值
【发布时间】:2016-06-17 15:06:08
【问题描述】:

我有一个用户模型,我正在线程中设置一个值

Thread.current[:partner_domain] = "example.com"

我可以在模型中访问它,但不能在延迟的工作人员中访问,因为它在单独的线程中运行,由于某些业务需求,我无法将此域保存在我的数据库中。

为了更清楚,我在动态创建的方法中使用Thread.current[:partner_domain],该方法由延迟的作业工作者调用

请帮帮我。

【问题讨论】:

  • 全球状态 FTW!不,不要这样做。或者,如果您知道自己在做什么,风险自负。
  • @bsvin33t 这样的事情怎么处理,能发个答案吗?
  • 我还有一个问题,你不能用redis之类的东西来持久化值吗?
  • 每个工作的这个值是变化的还是静态的?
  • @bsvin33t:全局状态很好。另一方面,可变全局状态....

标签: ruby-on-rails ruby multithreading ruby-on-rails-4 delayed-job


【解决方案1】:

多线程与此无关。 DelayedJob 工作进程在单独的 进程 中运行,因此不会与您的 Rails 服务器进程共享任何内容。不是线程,不是内存,什么都没有。

正确的做法是将作业所需的所有数据捆绑到其参数中。像这样的:

 MyClass.delay.do_action(primary_data, options)

options 包含您的合作伙伴域名和所有其他信息。然后作业只是访问参数中的信息。

【讨论】:

    【解决方案2】:

    如果延迟的作业工作者需要此值来处理作业,我认为您可以将该值作为作业的参数传递。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多