Я использую sidekiq
для выполнения некоторых фоновых заданий, но имею некоторые сомнения в передаче аргументов perform
метода sidekiq's
класс рабочих.Аргументы для метода sidekiq worker
Сценарий: Как только пользователь вводит в моем приложении я храню данные журнала в моей модели user_sessions
.
As-обычный выполнение специального действия в моем контроллере. Но после отображения информации пользователю мне нужно выполнить некоторую дополнительную операцию и нужно обновить один столбец в модели user_session
.
СЛЕДОВАЛИ процедура упоминается here
шаг 1: Добавлен gem 'sidekiq'
в гем файл.
Шаг 2: Установленный 'redis'
драгоценный камень.
шага 3: расслоение установить
шаг 4:
class MyController < ApplicationController
def MyAction
#perform dedicated action
@info = #render data to user
param1 = #parameter to find in user_session model(its a string.i don't get id of model here)
param2 = #extra param to perform task
UpdateWorker.perform_async(param1,param2)
end
end
шага 5: Создана папку уборщицы в папке приложения.
class UpdateWorker
include Sidekiq::Worker
def perform(param1,param2)
puts "======> updating "
#retrieve `user_session` based on param1(note: param1 is not an id)
#perform update functions
UserSession.update_attribute(:column, value)
end
end
шаг 6: Начало rails server
шага 7: В другой вкладке начало bundle exec sidekiq
Error NoMethodError (undefined method 'key?' for JSON::Ext::Generator::State:0x007f1b......
Как уже упоминалось here и here мне нужно передать идентификатор объекта в параметрах. Что касается моего сценария, кто-нибудь может предложить мне, как решить мою проблему?
я должен понизить мой мульти-JSon версию ли? – Aparichith
Итак, первое, что нужно сделать, это зарегистрировать тип param1 и param2 в контроллере. Почти уверен, что вы передаете сложный, несериализуемый объект в сторону Sidekiq. –
@PeterGoldstein будучи новичком, я мало что понял, что вы прокомментировали. Не могли бы вы немного объяснить об этом. Пожалуйста? – Aparichith