2016-08-16 2 views
2

, поэтому я выполнял руководство DHH по внедрению основной комнаты для чата.Получение ActiveJob и Sidekiq, работающих с ActionCable для чата

Реализация для меня достаточно хорошо, пока я не попытаюсь интегрировать компонент ActiveJob.

Я не вижу сообщений об ошибках в своих рельсах или боковой консоли. Но частичное _message просто не отображается. Когда я добавляю bind.pry в метод ActiveJob, все элементы кажутся точными, поэтому я предполагаю, что это связано с выполнением задания?

Для дальнейшей поддержки этого подозрения, когда я называю

ActionCable.server.broadcast('room_channel', message: data['message']) 

из room_channel.rb это работает просто отлично!

Я потратил часы на это и не могу решить, как отлаживать дальше. Мне интересно, нужна ли мне какая-либо другая конфигурация redis с Sidekiq, чтобы она работала. Я до сих пор просто поставить:

config.active_job.queue_adapter = :sidekiq 

в application.rb

мне нужно иметь REDIS инициализатору также делать ??

Любые предложения по этому поводу или любые другие идеи были бы высоко оценены!

Rails Сервер:

// ♥ rails s 
=> Booting Puma 
=> Rails 5.0.0.1 application starting in development on  http://localhost:3000 
=> Run `rails server -h` for more startup options 
Puma starting in single mode... 
* Version 3.6.0 (ruby 2.2.3-p173), codename: Sleepy Sunday Serenity 
* Min threads: 5, max threads: 5 
* Environment: development 
* Listening on tcp://localhost:3000 
Use Ctrl-C to stop 
Started GET "/cable" for ::1 at 2016-08-16 16:25:21 +0100  
    ActiveRecord::SchemaMigration Load (0.4ms) SELECT "schema_migrations".* FROM "schema_migrations" 
Started GET "/cable/" [WebSocket] for ::1 at 2016-08-16 16:25:21 +0100 
Successfully upgraded to WebSocket (REQUEST_METHOD: GET,  HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket) 
Finished "/cable/" [WebSocket] for ::1 at 2016-08-16 16:25:21 +0100 
Started GET "/cable" for ::1 at 2016-08-16 16:25:22 +0100 
Started GET "/cable/" [WebSocket] for ::1 at 2016-08-16 16:25:22 +0100 
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket) 
RoomChannel is transmitting the subscription confirmation 
RoomChannel is streaming from room_channel 
RoomChannel#speak({"message"=>"new message"}) 
    (0.1ms) BEGIN 
     SQL (0.5ms) INSERT INTO "messages" ("content", "created_at",  "updated_at") VALUES ($1, $2, $3) RETURNING "id" [["content", "new  message"], ["created_at", 2016-08-16 15:25:25 UTC], ["updated_at", 2016- 08-16 15:25:25 UTC]] 
(1.3ms) COMMIT 
[ActiveJob] Enqueued MessageBroadcastJob (Job ID: 5981c48d-afbc-4fad-a595-198b56aa90f4) to Sidekiq(default) with arguments: #<GlobalID:0x007f82aa837b90 @uri=#<URI::GID gid://dragonfly/Message/39>> 

Sidekiq:

bundle exec sidekiq -q default -q mailers 

2016-08-16T15:23:32.583Z 70743 TID-ow892ejts INFO: Running in ruby  2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin15] 
2016-08-16T15:23:32.583Z 70743 TID-ow892ejts INFO: See LICENSE and the LGPL-3.0 for licensing details. 
2016-08-16T15:23:32.583Z 70743 TID-ow892ejts INFO: Upgrade to Sidekiq Pro for more features and support: http://sidekiq.org 
2016-08-16T15:23:32.584Z 70743 TID-ow892ejts INFO: Booting Sidekiq 4.1.2 with redis options {:url=>nil} 
2016-08-16T15:23:32.587Z 70743 TID-ow892ejts INFO: Starting processing, hit Ctrl-C to stop 
2016-08-16T15:24:00.652Z 70743 TID-ow89s527k MessageBroadcastJob JID-4ae621ca049eb428ced1c7d2 INFO: start 
2016-08-16T15:24:01.153Z 70743 TID-ow89s527k MessageBroadcastJob JID- 4ae621ca049eb428ced1c7d2 INFO: done: 0.501 sec 
2016-08-16T15:24:14.351Z 70743 TID-ow89s52rk MessageBroadcastJob JID-fe94b25a9100e83f874ea785 INFO: start 

приложение/Работа/message_broadcast_job.rb

class MessageBroadcastJob < ApplicationJob 
     queue_as :default 

     def perform(message) 
     ActionCable.server.broadcast "room_channel", {message: render_message(message)} 
    end 

    private 

    def render_message(message) 
    ApplicationController.renderer.render(partial: 'messages/message', locals: { message: message }) 
    end 

end 

приложение/активы/JavaScripts/каналы/room.coffee

App.room = App.cable.subscriptions.create "RoomChannel", 
    connected: -> 
    # Called when the subscription is ready for use on the server 

    disconnected: -> 
    # Called when the subscription has been terminated by the server 

    received: (data) -> 
    alert data['message'] 

    speak: (message) -> 
    @perform 'speak', message: message 

$(document).on 'keypress', '[data-behaviour~=room_speaker]', (event) -> 
    if event.keyCode is 13 
    App.room.speak event.target.value 
    event.target.value = '' 
    event.preventDefault() 
+0

Вы когда-либо делали какие-либо успехи в использовании actioncable с sidekiq? –

ответ

0

Это не связано с ActiveJob или Sidekiq. Я предполагаю, что при частичном отображении должна быть некоторая ошибка.

Попробуйте выполнить строку в консоли Rails,

ApplicationController.renderer.render(partial: 'messages/message', locals: { message: message }) 

Надеется, вы получите некоторые значимые ошибки, такие как неопределенный метод или что-то подобное.

+1

Спасибо! Хорошая идея для отладки такого рода вещей. Итак, я спросил эксперта Rails об этом, и они взломали его в течение дня, и они пришли к выводу, что это проблема с Sidekiq (или любой службой обслуживания очередей), поскольку они не уступают контроль в Action Cable. –

Смежные вопросы