如何在Rails中处理大量静态数据的最佳实践?

4
例如,我正在管理一个Rails应用程序,其中包含在所有环境中都相关的静态内容,但如果需要,我仍然希望能够修改。例如:州、测验问题、葡萄酒品种等。您的用户内容与这些静态数据之间存在关系,如果需要,我希望能够实时修改它,因此必须将其存储在数据库中。
我一直使用迁移来管理它,以保持团队和所有环境的同步。
有人曾经教条地告诉我,迁移只应用于对数据库的结构更改。我理解这个观点。
我的反驳是,这些主要是“静态”的数据对应用程序的功能至关重要,如果我不自动更新它(每个人都已经接受了运行迁移的培训),那么某些人会遇到失败并搜索问题所在,然后才发现表中添加了新的强制字段,并且他们需要导入一些内容。因此,我只需在迁移中执行此操作。这也使得部署更加简单和安全。
我具体的做法是保持我的测试装置文件与良好的数据同步(这也有助于让我编写更加真实的测试),并在必要时重新导入。我使用connection.execute "some SQL"而不是使用模型,因为我发现Model.reset_column_information+一堆Model.create有时会在每个人立即更新后起作用,但当我几周后推送到生产环境时,它最终会爆炸,因为我在模型上有新的验证与两周前的迁移冲突。
无论如何,我认为这种YAML + SQL的过程可以少些爆炸,但我也觉得它非常笨拙。我想知道人们如何管理这种数据。Rails中是否有其他技巧可用?是否有用于管理静态数据的Gems?
1个回答

0
在我工作的应用程序中,我们使用一个称为“DictionaryTerms”的概念作为查找值。每个术语都有它所属的类别。在我们的情况下,这是人口统计学术语(因此截图中的数据),包括与性别、种族和位置(例如州)有关的术语,以及其他一些术语。

enter image description here

然后,您可以使用典型的CRUD操作来添加/删除/编辑字典术语。如果您需要在环境之间迁移术语,则可以编写一个rake任务通过CSV文件从一个数据库导出/导入数据到另一个数据库。

如果您不想进行导入/导出,则可能希望将该数据与应用程序本身分开托管,通过类似JSON请求的方式访问,并使您的应用程序从该请求中提取术语。如果您的情况很简单,那么这似乎是很多额外工作。


谢谢你的回答。我想知道其他人是如何管理这些数据随时间变化所做的修改的方法。导入/导出的想法对我来说行不通,因为它不能解决整个团队和部署过程中无缝处理的问题。这是另一件你必须记住在部署期间要做的事情,并提醒同事们。 - webmat
换句话说,我正在寻找更好的方法来管理这些“数据迁移”,最好使用迁移机制。 - webmat
1
你可以编写一个迁移,但那是一个静态的、一次性的导入。如果这就是你所需要的,那么这很容易实现,你可以采用这种方式。如果相反,它是一个rake任务(即使是静态导入的数据),你会希望将其作为Capistrano部署任务的一部分,或者你用于部署的任何部署工具。将其包含在自动化部署任务中可以消除人们记得执行它的负担,因为它是自动的。 - jefflunt
嗯,我喜欢一个简单的 rake 任务的想法。对于任何同事来说都很容易理解,并且在部署时很容易自动化。为什么我没有想到呢? :-) - webmat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接