Rails5,Cable / WebSocket Postgres在多个数据库上收听/通知

时间:2018-06-17 22:23:05

标签: ruby-on-rails postgresql websocket multi-database

我们在Rails 5应用程序中使用Cable,以使Web应用程序能够使用Web套接字显示实时更新。该应用程序提供了一个"仪表板"在多个数据库中进行这些更新。

我们在一个数据库中运行良好,使用标准的cable.yml数据库配置来定义postgres:

(cable.yml)     发展:       适配器:postgresql

test:
  adapter: postgresql

production:
  adapter: postgresql

当然还有凭证的database.yml:

(database.yml中)     默认值:&默认值       适配器:postgresql       编码:unicode       pool:<%= ENV.fetch(" RAILS_MAX_THREADS"){5}%>

development:
  <<: *default
  database: xxxxxxxxxx
  username: xxxxxx
  password: xxxxxxx
  host: xxxxx.example.com
  port: xxxx

有线目录有一个标准的config.ru条目: (config.ru)

require_relative '../config/environment'
Rails.application.eager_load!

run ActionCable.server

(CONFIG / environment.rb中):

# Load the Rails application.
require_relative 'application'

# Initialize the Rails application.
Rails.application.initialize!

频道在app / channels中定义: (example_channel.rb):

class ExampleChannel < ApplicationCable::Channel
  def subscribed
    stream_from "example_channel"
  end

  def unsubscribed
  end
end

在数据库中,如果我们发出通知:

psql xxxxx
notify example_channel, '[{.... JSON PAYLOAD ....}]'

然后,listen会正确触发,并且网页都会正确更新。

但是,这适用于数据库xxxxxx。我们还需要能够在database2上发出通知,所以:

  1. 定义第二个数据库database2,该数据库位于不同的服务器上
  2. 定义第二个频道example2_channel
  3. 能够使用JSON有效负载在database2上发出通知,并且Web应用程序正在侦听这些通知并相应地做出响应。
  4. 在Rails中,将模型定义为在不同的数据库上很容易。但是,我无法看到任何可以使用Cable执行相同操作的地方。有没有人有办法在Rails中的同一个应用程序中运行多个通道,每个通道都在不同的数据库中运行?

    即。任何人都知道如何使Cable成为多个数据库朋友,因为模型是?

0 个答案:

没有答案