class SocketController < WebsocketRails::BaseController around_action do |controller, action| DEBUG "before #{controller.action_name}" binding.pry action.call DEBUG "after #{controller.action_name}" DEBUG "me: id = #{@me.id}, partner_id = #{@me.partner_id}" DEBUG "partner: id = #{@partner.id}, partner_id = #{@partner.partner_id}" if @partner end # остальные методы end and, for example, event client_connected leads to the following conclusion
Started GET "/websocket" for ::1 at 2016-05-12 17:35:29 +0300 >>>> before client_connected >>>> before client_connected >>>> before client_connected (0.2ms) BEGIN SQL (0.3ms) INSERT INTO "clients" ("session_id", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id" [["session_id", "2_MX40NTU4NjExMn5-MTQ2MzA2MzczMDEwM35OQ3NaWElDcnhVSlMwMnpyc1cwaStUZzV-UH4"], ["created_at", "2016-05-12 14:35:30.170780"], ["updated_at", "2016-05-12 14:35:30.170780"]] (1.6ms) COMMIT >>>> after client_connected >>>> me: id = 73, partner_id = >>>> after client_connected >>>> me: id = 73, partner_id = >>>> after client_connected >>>> me: id = 73, partner_id = How is it and how to make around_action called once?
Backtrace after debugger volunteered 4 times:
From: /home/bjorn/Documents/rouletter/app/controllers/socket_controller.rb @ line 10 : 5: before_action :config_opentok, only: [:client_connected, :find_partner] 6: before_action :config_clients, except: [:client_connected] 7: 8: around_action do |controller, action| 9: DEBUG "before #{controller.action_name}" => 10: binding.pry 11: action.call 12: DEBUG "after #{controller.action_name}" 13: DEBUG "me: id = #{@me.id}, partner_id = #{@me.partner_id}" 14: DEBUG "partner: id = #{@partner.id}, partner_id = #{@partner.partner_id}" if @partner 15: end /home/bjorn/Documents/rouletter/app/controllers/socket_controller.rb:10:in `block in <class:SocketController>' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:441:in `instance_exec' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:441:in `block in make_lambda' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:312:in `block in halting' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:497:in `block in around' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:505:in `call' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:498:in `block (2 levels) in around' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:313:in `block (2 levels) in halting' /home/bjorn/Documents/rouletter/app/controllers/socket_controller.rb:11:in `block in <class:SocketController>' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:441:in `instance_exec' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:441:in `block in make_lambda' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:312:in `block in halting' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:497:in `block in around' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:505:in `call' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:498:in `block (2 levels) in around' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:313:in `block (2 levels) in halting' /home/bjorn/Documents/rouletter/app/controllers/socket_controller.rb:11:in `block in <class:SocketController>' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:441:in `instance_exec' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:441:in `block in make_lambda' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:312:in `block in halting' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:497:in `block in around' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:505:in `call' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:498:in `block (2 levels) in around' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:313:in `block (2 levels) in halting' /home/bjorn/Documents/rouletter/app/controllers/socket_controller.rb:11:in `block in <class:SocketController>' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:441:in `instance_exec' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:441:in `block in make_lambda' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:312:in `block in halting' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:497:in `block in around' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:505:in `call' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:92:in `__run_callbacks__' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks' /home/bjorn/.gem/ruby/2.3.0/gems/activesupport-4.2.6/lib/active_support/callbacks.rb:81:in `run_callbacks' /home/bjorn/.gem/ruby/2.3.0/gems/actionpack-4.2.6/lib/abstract_controller/callbacks.rb:19:in `process_action' /usr/lib/ruby/gems/2.3.0/gems/websocket-rails-0.7.0/lib/websocket_rails/dispatcher.rb:65:in `block (3 levels) in route' /usr/lib/ruby/gems/2.3.0/gems/websocket-rails-0.7.0/lib/websocket_rails/logging.rb:66:in `log_event' /usr/lib/ruby/gems/2.3.0/gems/websocket-rails-0.7.0/lib/websocket_rails/dispatcher.rb:62:in `block (2 levels) in route'
action.callcalls itself, but if you change it toyield, then action games are never called up or run out - srghma