ruby-on-rails - Sidekiq 如何使用 Rails 进程空间中的对象?
问题描述
我正试图围绕 Rails 应用程序中的后台进程执行。我有一个模型,我想根据要求在后台运行一个方法:
class MyController < ApplicationController
def perform
perform { MyModel.find(params[:id])&.my_method }
end
end
Rails 的众多队列适配器允许我这样做。我选择了Sidekiq。这是我的工作课程:
class MyMethodJob < ApplicationJob
def perform(id)
MyModel.find(params[:id])&.my_method
end
end
回到控制器我有
class MyController < ApplicationController
def perform
MyMethodJob.perform_later params[:id]
end
end
我的理解是,这MyModel.find(params[:id])&.my_method
实际上是由 Sidekiq 的一个工作线程在不同进程中执行的。在我看来,这意味着 Sidekiq 的进程必须知道MyModel
类及其实例方法。我不明白不同的进程如何能够从我的 Rails 应用程序中成功操作 Ruby 对象。Sidekiq 是否也将我的 Rails 应用程序中的所有类加载到它的 ObjectSpace 中?归根结底,我希望能够做一些类似于 Sidekiq 所做的事情——在一个单独的进程中执行一项工作,同时能够使用我的 Rails 应用程序中的代码,并通过 Active Record 访问数据库。我觉得我对这实际上是如何工作的有一个概念性的误解,并且真的很想在你的帮助下弄清楚。
解决方案
推荐阅读
- wpf - 如何在 XAML 中从类中调用变量
- javascript - 如何在 React js 中删除 Web 应用程序 cookie
- java - 图形旋转时Java JUNG 2顶点分离
- grep - 如何grep忽略标点符号的字符串?
- python - 在 pandas EWM 函数中设置自定义 Alpha
- python - 如何在 Keras 中将二进制分类的 DataGenerator() 函数修改为多标签分类?
- react-native - React Native useEffect 从 Axios 返回未定义的值
- loops - 为什么我会在 golang 中使用 `case <-time.After(time.Second * 1):` 而不是 `time.Sleep(time.Second * 1)`
- python - 烧瓶-PyMongo。如何显示从 python 到 html 的所有条目?
- python - 为什么我在 postgresql 中加载的表没有像在 Python 中那样排序?