【问题标题】:Should I use an YAML file or the DB to store my success/error messages in Rails app?我应该使用 YAML 文件还是数据库在 Rails 应用程序中存储成功/错误消息?
【发布时间】:2019-05-13 03:42:58
【问题描述】:

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

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

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

【问题讨论】:

  • 这取决于一些事情,但我认为通常存储在 yml 中更好。它更快更容易维护。
  • 我在YAML 中看到过 i18n 文件,但从未在 YML 中看到过 i18n 文件,而且它们不一样。

标签: ruby-on-rails yaml error-messaging


【解决方案1】:

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

获取消息很简单:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-16
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      相关资源
      最近更新 更多