我有两个不同的应用程序使用一个数据库。其中一个是Rails应用程序,仅作为显示数据的用户界面。
所以,我想以某种方式挂钩,当另一个应用程序在数据库中进行更改,并执行Rail操作(我想使用websockets并向每个侦听器发送这些新数据)。
那么,我该如何处理呢?如果我在Rails应用程序中更改模型,我可以使用ActiveRecord Hooks。
所以,好主意可能是运行后台工作者,或类似的东西?
或者,可能最好的想法是在没有websockets的情况下从javascript中重复询问服务器?
答案 0 :(得分:0)
我更喜欢,如果第二个应用程序(修改数据库中的数据)会在消息队列(Redis,RabbitMQ)中写入内容。
您的rails应用程序将收到此事件并通知用户。
rails app和frontend之间的最佳传输 - websockets。例如,使用http://faye.jcoglan.com/。
答案 1 :(得分:0)
常见的是在某些端口上使用列表器。这里有几个可以帮你解决问题的库:
答案 2 :(得分:0)
好的,谢谢大家的回答,我认为我找到了最好的解决方案。
它使用新的Rails4功能 - SSE。
因此,我的控制器代码非常简单易懂:
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
端
也许半秒钟调用ActiveRecord - 太贵了,所以我可能会转移到Redis。