如何解决从 Async 执行 MessageBroadcastJob 时出错默认:ArgumentError参数数量错误给定 1,预期为 2
我正在尝试通过使用 Rails 6 和 ActionCable 制作一个私人的一对一聊天应用程序来学习 ActionCable。在消息创建提交后,我正在执行一个 messageBroadcast 作业,可以在我的 Message.rb 模型文件中看到:
class Message < ApplicationRecord
belongs_to :user
belongs_to :conversation
after_create_commit { MessageBroadcastJob.perform_later(self) }
end
我的消息广播工作对我来说也很好。然而,它产生了错误数量的参数,这对我来说毫无意义。下面是我的 message_braodcast_job.rb 文件:
class MessageBroadcastJob < ApplicationJob
queue_as :default
def perform(message)
sender = message.user
recipient = message.conversation.opposed_user(sender)
broadcast_to_sender(sender,message)
broadcast_to_recipient(recipient,message)
end
private
def broadcast_to_sender(user,message)
ActionCable.server.broadcast(
"conversations-#{user.id}",message: render_message(message,user),conversation_id: message.conversation_id
)
end
def broadcast_to_recipient(user,window: render_window(message.conversation,conversation_id: message.conversation_id
)
end
def render_message(message,user)
ApplicationController.render(
partial: 'messages/message',locals: { message: message,user: user }
)
end
def render_window(conversation,user)
ApplicationController.render(
partial: 'conversations/conversation',locals: { conversation: conversation,user: user }
)
end
end
我不知道为什么会出现这个错误。查看跟踪对我来说不是特别有帮助:
ConversationChannel#speak({"message"=>[{"name"=>"conversation_id","value"=>"2"},{"name"=>"user_id","value"=>"4"},{"name"=>"body","value"=>"hgyhhhh"}]})
TRANSACTION (0.1ms) begin transaction
↳ app/channels/conversation_channel.rb:16:in `speak'
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id",4],["LIMIT",1]]
↳ app/channels/conversation_channel.rb:16:in `speak'
Conversation Load (0.3ms) SELECT "conversations".* FROM "conversations" WHERE "conversations"."id" = ? LIMIT ? [["id",2],1]]
↳ app/channels/conversation_channel.rb:16:in `speak'
Message Create (3.3ms) INSERT INTO "messages" ("body","user_id","conversation_id","created_at","updated_at") VALUES (?,?,?) [["body","hgyhhhh"],["user_id",["conversation_id",["created_at","2021-05-10 10:47:32.689339"],["updated_at","2021-05-10 10:47:32.689339"]]
↳ app/channels/conversation_channel.rb:16:in `speak'
TRANSACTION (5.6ms) commit transaction
↳ app/channels/conversation_channel.rb:16:in `speak'
[ActiveJob] Enqueued MessageBroadcastJob (Job ID: f5861f88-fa39-4976-a7ca-65b4009610ec) to Async(default) with arguments: #<GlobalID:0x000000000b21f768 @uri=#<URI::GID gid://group12/Message/19>>
Message Load (0.3ms) SELECT "messages".* FROM "messages" WHERE "messages"."id" = ? LIMIT ? [["id",19],1]]
[ActiveJob] [MessageBroadcastJob] [f5861f88-fa39-4976-a7ca-65b4009610ec] Performing MessageBroadcastJob (Job ID: f5861f88-fa39-4976-a7ca-65b4009610ec) from Async(default) enqueued at 2021-05-10T10:47:32Z with arguments: #<GlobalID:0x000000000b2b3df0 @uri=#<URI::GID gid://group12/Message/19>>
[ActiveJob] [MessageBroadcastJob] [f5861f88-fa39-4976-a7ca-65b4009610ec] User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id",1]]
[ActiveJob] [MessageBroadcastJob] [f5861f88-fa39-4976-a7ca-65b4009610ec] ↳ app/jobs/message_broadcast_job.rb:5:in `perform'
[ActiveJob] [MessageBroadcastJob] [f5861f88-fa39-4976-a7ca-65b4009610ec] Conversation Load (0.2ms) SELECT "conversations".* FROM "conversations" WHERE "conversations"."id" = ? LIMIT ? [["id",1]]
[ActiveJob] [MessageBroadcastJob] [f5861f88-fa39-4976-a7ca-65b4009610ec] ↳ app/jobs/message_broadcast_job.rb:6:in `perform'
[ActiveJob] [MessageBroadcastJob] [f5861f88-fa39-4976-a7ca-65b4009610ec] CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id",1]]
[ActiveJob] [MessageBroadcastJob] [f5861f88-fa39-4976-a7ca-65b4009610ec] ↳ app/models/conversation.rb:22:in `opposed_user'
[ActiveJob] [MessageBroadcastJob] [f5861f88-fa39-4976-a7ca-65b4009610ec] User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id",3],1]]
[ActiveJob] [MessageBroadcastJob] [f5861f88-fa39-4976-a7ca-65b4009610ec] ↳ app/models/conversation.rb:22:in `opposed_user'
[ActiveJob] [MessageBroadcastJob] [f5861f88-fa39-4976-a7ca-65b4009610ec] Rendered messages/_message.html.erb (Duration: 0.1ms | Allocations: 28)
[ActiveJob] [MessageBroadcastJob] [f5861f88-fa39-4976-a7ca-65b4009610ec] Error performing MessageBroadcastJob (Job ID: f5861f88-fa39-4976-a7ca-65b4009610ec) from Async(default) in 54.26ms: ArgumentError (wrong number of arguments (given 1,expected 2)):
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/actioncable-6.1.3.1/lib/action_cable/server/broadcasting.rb:24:in `broadcast'
C:/Users/Moussa Sarr/OneDrive/Desktop/Group12/app/jobs/message_broadcast_job.rb:14:in `broadcast_to_sender'
C:/Users/Moussa Sarr/OneDrive/Desktop/Group12/app/jobs/message_broadcast_job.rb:7:in `perform'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activejob-6.1.3.1/lib/active_job/execution.rb:48:in `block in perform_now'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activesupport-6.1.3.1/lib/active_support/callbacks.rb:117:in `block in run_callbacks'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/i18n-1.8.10/lib/i18n.rb:314:in `with_locale'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activejob-6.1.3.1/lib/active_job/translation.rb:9:in `block (2 levels) in <module:Translation>'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activesupport-6.1.3.1/lib/active_support/callbacks.rb:126:in `instance_exec'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activesupport-6.1.3.1/lib/active_support/callbacks.rb:126:in `block in run_callbacks'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activesupport-6.1.3.1/lib/active_support/core_ext/time/zones.rb:66:in `use_zone'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activejob-6.1.3.1/lib/active_job/timezones.rb:9:in `block (2 levels) in <module:Timezones>'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activesupport-6.1.3.1/lib/active_support/callbacks.rb:126:in `instance_exec'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activesupport-6.1.3.1/lib/active_support/callbacks.rb:126:in `block in run_callbacks'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activejob-6.1.3.1/lib/active_job/instrumentation.rb:21:in `block in instrument'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activesupport-6.1.3.1/lib/active_support/notifications.rb:203:in `block in instrument'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activesupport-6.1.3.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activesupport-6.1.3.1/lib/active_support/notifications.rb:203:in `instrument'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activejob-6.1.3.1/lib/active_job/instrumentation.rb:31:in `instrument'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activejob-6.1.3.1/lib/active_job/instrumentation.rb:14:in `block (2 levels) in <module:Instrumentation>'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activesupport-6.1.3.1/lib/active_support/callbacks.rb:126:in `instance_exec'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activesupport-6.1.3.1/lib/active_support/callbacks.rb:126:in `block in run_callbacks'
C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/activejob-6.1.3.1/lib/active_job/logging.rb:22:in `block in tag_logger'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。