0

在我的 Rails 应用程序中,执行一些代码后,我想向用户发送 Slack 消息以通知他们执行结果。我想为多个进程发送这些消息,简而言之,我需要在某个地方存储成功/错误的消息模板(它们只是短字符串,例如“嗨,我们已经成功完成 x!”,但是它们因每个过程而异)。

现在,我SlackMessage在数据库中有一个模型,您可以从中检索消息内容。但是,我听说最好在yml文件中管理这样的自定义消息,因为以后添加/编辑消息更容易(就像这样,即使这是针对语言环境的)。

这种情况的最佳实践是什么?如果不使用数据库,我很感激您能否提供有关如何操作的指针或链接(就使用yml文件而言,我能找到的唯一材料是国际化)。

4

2 回答 2

2

为什么不使用I18nRails 中已经存在的模块?这非常适合存储消息,并让您能够使用将来需要的翻译。

获取消息很简单:

Slack.message(I18n.t(:slack_message, scope:'slack'))

在这种情况下,您需要这样的翻译文件:

en:
  slack:
    slack_message: This is the message you are going to select.

阅读有关 I18n 的更多信息:https ://guides.rubyonrails.org/i18n.html

于 2019-05-13T05:21:53.003 回答
0

YAML 通常比从数据库加载数据要慢得多。此外,即使 YAML 流中有多个文档,YAML 解析器通常也会加载所有数据。

对于运行时间长且使用大部分消息的程序,使用 YAML 通常是没有问题的。但在短期运行的程序中,加载可能是运行时间的重要组成部分,延迟加载和缓存等技术可能无济于事。举个例子:前段时间我的 YAML 库得到了一个 PR,它延迟了库中正则表达式的实例化,因为这延迟了一些程序的启动。

如果你有很多消息,它们在从 YAML 加载后都留在内存中,这可能是个问题。使用数据库更常见的是只检索需要的内容,并依靠数据库有效地执行此操作(缓存等)。

如果上述优点和标准不能帮助您做出决定,您也可以同时拥有它:通过 YAML 的易于阅读/编辑数据库的速度、缓存等。“只是”将 YAML 流转换为数据库,无论是在编辑 YAML 文档之后还是在您的程序首次使用时(通过查看文件 date-time-stamps)。这是程序喜欢postfix使用依赖的方法postmap(尽管输入是文本,但不是 YAML 文件)。

于 2019-05-13T04:40:39.617 回答