在启动时调用AdminDashboardGeneralData.refresh_stats?

https://www.pfaffmanager.com//admin/dashboard/general.json 拉取信息以获取版本信息。能够从用户体验中获取这些信息非常棒。不幸的是,它不是在服务器启动时更新,而是定期更新,因此如果您进行重建,信息在再次运行之前(长达 30 分钟)都是错误的。我的计划是让我的 Ansible 工具在新的容器启动后手动调用 AdminDashboardGeneralData.refresh_stats,但这似乎有点傻。

让该任务在启动时运行而不是每 30 分钟运行一次是否有意义?有没有办法在不重启的情况下更新它?如果没有,为什么它每 30 分钟运行一次?至少我认为是这样。我已经确认运行上述 refresh_stats 会使 general.json 更新。

2 个赞

通常,我们不希望在“启动时”运行某些东西。虽然这在单服务器、非多站点环境中可能是有意义的,但在大规模环境中情况会变得复杂。

例如,如果您有一个自动伸缩设置,根据负载添加/删除服务器,那么这些伸缩事件中的每一个都可能导致多个服务器同时“启动”。我们不希望它们在更新某些统计信息时延迟启动。

我们还希望确保服务器能够成功启动,即使数据库/redis处于只读状态。

对于这个特定的 pfaffmanager 用例,您是否在站点上运行自定义插件和/或 discourse_docker 模板?在 Discourse 外部,您可以触发它,如下所示:

rails runner "About.refresh_stats
3 个赞

谢谢。这一切都说得通。

不!关键原则之一是,一切都与标准安装时一样。pfaffmanager 没有零个特定于 pfaffmanager 的依赖项。如果有人在这里看到他们应该执行类似重建、添加插件或向 app.yml 添加环境变量的操作,pfaffmanager 将会像他们知道 ssh 是什么并且能够键入命令一样精确地执行。安装使用 discourse-setup,升级运行 ./launcher rebuild(或 2 容器设置的 bootstrap, destroy, start)。如果 Postgres 过时,将遵循 PostgreSQL 13 更新 中的程序,依此类推。有几件事曾诱使我制作一个可选的支持插件,但我主要想避免这种情况。我已经在使用 Ansible、Rails 和 Ember——再引入另一个组件并不吸引人。

但是那个 runner 部分非常有帮助。我将在新构建的容器重启后运行它:

docker exec web_only bash -c 'rails runner AdminDashboardGeneralData.refresh_stats'

非常感谢。这正是我所需要的。

3 个赞