Ruby on rails 关于数据更改的Rails回调

Ruby on rails 关于数据更改的Rails回调,ruby-on-rails,websocket,rails-activerecord,Ruby On Rails,Websocket,Rails Activerecord,我有两个不同的应用程序使用一个数据库。其中之一是Rails应用程序,仅作为显示数据的用户界面 所以,我希望以某种方式钩住另一个应用程序在数据库中进行更改的时刻,并执行Rail操作(我希望使用WebSocket并向每个侦听器发送这些新数据) 那么,我该怎么处理呢?若我在Rails应用程序中更改了模型,我就可以使用ActiveRecord挂钩 所以,也许最好是运行后台工作程序,或者类似的东西 或者,如果第二个应用程序(修改数据库中的数据)将在消息队列(Redis、RabbitMQ)中写入内容,那么最

我有两个不同的应用程序使用一个数据库。其中之一是Rails应用程序,仅作为显示数据的用户界面

所以,我希望以某种方式钩住另一个应用程序在数据库中进行更改的时刻,并执行Rail操作(我希望使用WebSocket并向每个侦听器发送这些新数据)

那么,我该怎么处理呢?若我在Rails应用程序中更改了模型,我就可以使用ActiveRecord挂钩

所以,也许最好是运行后台工作程序,或者类似的东西


或者,如果第二个应用程序(修改数据库中的数据)将在消息队列(Redis、RabbitMQ)中写入内容,那么最好是在不使用WebSocket的情况下重复从javascript请求服务器?

您的rails应用程序将接收此事件并通知用户


rails应用程序和前端之间的最佳传输-WebSocket。例如使用。

常见的做法是在某些端口上使用listners。这里有几个LIB可以为您提供帮助:


  • 基本上,他们都有相同的想法:在提交后在
    回调中向所有订阅了应用程序特定端口的客户端发送通知。

    好吧,谢谢大家的回答,我认为我找到了最好的解决方案

    它使用新的Rails4功能-

    因此,我的控制器代码非常简单易懂:

    class GaugeController < ApplicationController
    include ActionController::Live
    
    def index
        begin
            response.headers['Content-Type'] = 'text/event-stream'
            sse = SSE.new(response.stream, retry: 300, event: 'message')
            loop do
                #get data from model to modelData
                sse.write(modelData)
                sleep(0.5)
            end
        ensure
            sse.close
        end
    end
    
    class GaugeController
    结束

    也许给ActiveRecord打半秒钟电话太贵了,所以我可能会转到Redis