antulik
(Anton Katunin)
2018 年12 月 11 日 22:07
1
背景
我们为澳大利亚 Ruby 社区托管了一个云端的 Discourse 实例(我将其称为 Master)。每年我们举办两次 RailsCamp 活动。在这些活动中,我们会在偏远地点共度整个周末(每场活动约有 50 至 150 人)。通常现场几乎没有或完全没有手机信号,这使得协调工作变得具有挑战性。
我一直在考虑,如果在活动现场的本地网络上托管一个 Discourse 实例会非常理想(我将其称为 Slave)。我们可以用它来发布公告、日程安排、分享照片等。
由于 Master 上已经有一个不断壮大的社区,如果能加以利用就太好了。例如,当您到达活动现场时,您的个人资料已经设置好,并且您拥有所有内容的副本。
挑战
如何在 Slave 离线三天的情况下,让 Slave 与 Master 同时运行。
建议方案
我理解 Discourse 并非为此设计。但我认为有一种方法可以满足我们的需求。我很想听听您对此的想法。
计划如下:
在活动现场的本地网络上设置一个 Slave Discourse 实例
在活动开始前,备份 Master 并将其恢复到 Slave
在 Slave 上:
所有分类将被标记为只读
我们创建一个用于活动的新可读写分类
活动结束后,使用 Ruby 脚本将信息从 Slave 传输到 Master
大功告成
问题
您认为建议的方案存在任何问题吗?
您能想到更好的方法吗?
虽然希望允许在 Slave 上对所有分类进行写操作,但我感觉同步过程可能会非常复杂。此外,这也可能造成混淆,因为有些人如果仍有信号,仍然可以访问 Master。
sam
(Sam Saffron)
2018 年12 月 11 日 23:59
2
Hello from a fellow Australian Rubyist…
This all sounds fine to me. To sync stuff up after the event I would recommend writing a small script that zooms through your read write categories and then makes API requests using our JSON API to create the topics / posts on the master.
I definitely recommend strongly against having any kind of merge topic scenario, it will be full of dragons and not worth the effort.
@antulik
你尝试过类似的方法吗?
我正在做类似的事情,需要将 Discourse 离线部署并实现同步。我有一台主服务器,并且会有超过 100 到 200 个从属实例。这些从属实例可以在线或离线运行,但会被用户使用。每当一个离线实例重新上线时,它应该能够与主服务器同步,而不会产生冲突,并更新所有最新数据。我不想对代码做任何修改,因为 Discourse 经常自行更新,我不希望因代码变更导致实例出现问题。
我考虑对 PostgreSQL 进行一些调整。其他与数据相关的文件可以通过 Syncthing 进行同步。但更新 PostgreSQL 数据让我有些担心,因为如果直接同步主服务器的数据,离线用户所做的更改在同步后会被覆盖。你之前编写相关脚本的经验如何?
antulik
(Anton Katunin)
2019 年12 月 26 日 21:18
4
我们尚未完成此事,因为我们在所有活动地点都没有互联网接入。