Как Sidekiq может использовать объект из пространства процессов Rails? - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь обернуться вокруг выполнения фонового процесса в приложении 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 и его методы экземпляра. Я не понимаю, как другой процесс может успешно манипулировать объектом Ruby из моего приложения Rails. Загружает ли Sidekiq все классы из моего приложения Rails в его ObjectSpace? В конце концов, я хотел бы иметь возможность сделать что-то похожее на то, что делает Sidekiq - выполнить работу в отдельном процессе, имея возможность использовать код из моего приложения Rails и получать доступ к базе данных через Active Record. Я чувствую, что у меня есть концептуальное недопонимание того, как это действительно работает, и очень хотел бы выяснить это с вашей помощью.

...