【问题标题】:Rails, seeding code is difficult to writeRails,种子代码很难写
【发布时间】:2012-09-28 00:37:34
【问题描述】:

我是使用 db 的新手。我们在服务器上的生产中使用了一个 rails 应用程序。我们继续在本地进行开发。其中一些开发导致向数据库添加内容。为了保持 dbs 同步,我们在本地为我们所做的一切手动编写种子代码,然后我们计划上传种子代码并在服务器上运行 rake 命令。这是这种事情的典型做法吗?有没有一种简单的方法来编写这个种子代码?这似乎既费力又痛苦,我只是浏览数据库以尝试找出最新的更改是什么,然后编写代码希望将相同的数据添加到服务器上的数据库中。谢谢

【问题讨论】:

  • 这是您可以通过迁移完成的事情吗(还可以添加到 db/seeds.rb 以获取您可能需要进行的任何全新安装,例如新开发人员加入该项目)?
  • 我不知道。同样,我对此很陌生。我的理解是迁移是为了添加模式,而播种是为了添加数据。这肯定涉及添加数据。也许有用于播种的生成器,例如用于迁移的生成器。或者也许我对它们的理解是不准确的。
  • 播种是通过单个文件完成的 - db/seeds.rb。如果您需要随着时间的推移添加新数据,最好的选择是使用迁移,因为播种旨在仅运行一次。您确实通常使用迁移来更改架构,但根据您的描述,它们似乎也是您最好的选择。
  • 任何答案在很大程度上取决于具体情况。例如:您的应用程序是像联系人数据库一样,并且您会获得很多新的 vcard 文件,还是更像是一种服务,它将越来越多的 api 集合在一起以提供通用接口?服务器上的数据是否通过用户、服务、cronjobs、邮件等发生变化?

标签: ruby-on-rails seed


【解决方案1】:

我过去也遇到过类似的问题,我们通过迁移解决了这个问题。做类似的事情

class AddSomeStuffToMyThing < ActiveRecord::Migration
  def self.up
    widget=MyThing.new()
    widget.attr_1 = "some stuff"
    widget.attr_2 = 341
    ...
  def self.down
    widget = MyThing.find_by_attr_1("some stuff")
    widget.destroy

如果您经常更改数据库中的种子数据,那么也许您应该开始研究像 Mongo 或 CouchDB 这样的无模式解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-02
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    相关资源
    最近更新 更多