我应该使用YAML文件还是数据库将成功/错误消息存储在Rails应用程序中?

时间:2019-05-13 03:42:58

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

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

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

如果上述优势和条件不能帮助您做出决定,那么您也可以同时采用这两种方式:通过轻松读取/编辑YAML 以及提高速度,缓存等功能。数据库的“仅”将YAML流转换为DB,无论是在编辑YAML文档之后还是在程序首次使用时(通过查看文件的date-time-stamps)将其显式转换。像postfix这样的程序就是依靠postmap来使用的方法(尽管输入是文本,而不是YAML文件)。