如何将 current_user 传递给 Sidekiq 的 Worker
How to pass current_user to Sidekiq's Worker
我正在尝试将 current_user
或 User.find(1)
传递给工作模块,但在 sidekiq 的仪表板中出现错误 (localhost:3000/sidekiq/retries):
NoMethodError: undefined method `supports' for "#":String
注意:我的关系还好即:
u = User.find(1)
u.supports
#=> []
supports_controller.rb:
def create
@user = current_user
ProjectsWorker.perform_async(@user)
...
end
app/workers/projects_worker.rb:
class ProjectsWorker
include Sidekiq::Worker
def perform(user)
u = user
@support = u.supports.build(support_params)
end
end
重新启动我的 sidekiq 服务器没有任何区别。这是在我的开发机器上。
The arguments you pass to perform_async must be composed of simple
JSON datatypes: string, integer, float, boolean, null, array and hash.
The Sidekiq client API uses JSON.dump to send the data to Redis. The
Sidekiq server pulls that JSON data from Redis and uses JSON.load to
convert the data back into Ruby types to pass to your perform method.
Don't pass symbols or complex Ruby objects (like Date or Time!) as
those will not survive the dump/load round trip correctly.
传递 id 而不是对象:
def create
ProjectsWorker.perform_async(current_user.id)
end
工人:
class ProjectsWorker
include Sidekiq::Worker
def perform(user_id)
u = User.find(user_id)
@support = u.supports.build(support_params)
end
end
我正在尝试将 current_user
或 User.find(1)
传递给工作模块,但在 sidekiq 的仪表板中出现错误 (localhost:3000/sidekiq/retries):
NoMethodError: undefined method `supports' for "#":String
注意:我的关系还好即:
u = User.find(1)
u.supports
#=> []
supports_controller.rb:
def create
@user = current_user
ProjectsWorker.perform_async(@user)
...
end
app/workers/projects_worker.rb:
class ProjectsWorker
include Sidekiq::Worker
def perform(user)
u = user
@support = u.supports.build(support_params)
end
end
重新启动我的 sidekiq 服务器没有任何区别。这是在我的开发机器上。
The arguments you pass to perform_async must be composed of simple JSON datatypes: string, integer, float, boolean, null, array and hash. The Sidekiq client API uses JSON.dump to send the data to Redis. The Sidekiq server pulls that JSON data from Redis and uses JSON.load to convert the data back into Ruby types to pass to your perform method. Don't pass symbols or complex Ruby objects (like Date or Time!) as those will not survive the dump/load round trip correctly.
传递 id 而不是对象:
def create
ProjectsWorker.perform_async(current_user.id)
end
工人:
class ProjectsWorker
include Sidekiq::Worker
def perform(user_id)
u = User.find(user_id)
@support = u.supports.build(support_params)
end
end