Ruby on rails 跨rails应用程序中的所有线程访问值
我有一个用户模型,我正在线程中设置一个值Ruby on rails 跨rails应用程序中的所有线程访问值,ruby-on-rails,ruby,multithreading,ruby-on-rails-4,delayed-job,Ruby On Rails,Ruby,Multithreading,Ruby On Rails 4,Delayed Job,我有一个用户模型,我正在线程中设置一个值 Thread.current[:partner_domain] = "example.com" 我可以在模型中访问此域,但不能在延迟的job worker中访问,因为它在单独的线程中运行,由于某些业务需求,我无法将此域保存在数据库中 更清楚地说,我正在动态创建的方法中使用Thread.current[:partner\u domain],该方法由延迟的工作人员调用 请帮我解决这个问题。如果延迟的工作人员需要此值来处理作业,我认为您可以将此值作为作业参数
Thread.current[:partner_domain] = "example.com"
我可以在模型中访问此域,但不能在延迟的job worker中访问,因为它在单独的线程中运行,由于某些业务需求,我无法将此域保存在数据库中
更清楚地说,我正在动态创建的方法中使用Thread.current[:partner\u domain]
,该方法由延迟的工作人员调用
请帮我解决这个问题。如果延迟的工作人员需要此值来处理作业,我认为您可以将此值作为作业参数传递。如果延迟的工作人员需要此值来处理作业,我认为您可以将此值作为作业参数传递。多线程与此无关。DelayedJob worker在一个单独的进程中运行,因此不会与rails服务器进程共享任何内容。没有线程,没有内存,什么都没有 正确的做法是将作业所需的所有数据捆绑到其参数中。大概是这样的:
MyClass.delay.do_action(primary_data, options)
其中
选项
包含您的合作伙伴域名和所有其他信息。然后作业只访问参数中的信息。多线程与此无关。DelayedJob worker在一个单独的进程中运行,因此不会与rails服务器进程共享任何内容。没有线程,没有内存,什么都没有
正确的做法是将作业所需的所有数据捆绑到其参数中。大概是这样的:
MyClass.delay.do_action(primary_data, options)
其中
选项
包含您的合作伙伴域名和所有其他信息。然后作业只访问参数中的信息。Global state FTW!不,不要这样做。或者,如果你知道自己在做什么,你可以自己承担风险。@bsvin33t如何处理这些事情,你能给出一个答案吗?我还有一个问题,你不能用redis之类的东西来保持这个值吗?这个值对每项工作都是变化的还是静态的?@bsvin33t:全局状态很好。另一方面,可变的全局状态……全局状态FTW!不,不要这样做。或者,如果你知道自己在做什么,你可以自己承担风险。@bsvin33t如何处理这些事情,你能给出一个答案吗?我还有一个问题,你不能用redis之类的东西来保持这个值吗?这个值对每项工作都是变化的还是静态的?@bsvin33t:全局状态很好。另一方面,可变的全局状态。。。。