【发布时间】:2016-10-18 06:10:53
【问题描述】:
我想做的是将数据库转储到自定义创建的 .rb 文件中。
我找到了一个可以让我这样做的seed_dump gem:
rails db:seed:dump FILE=db/seeds/my_db_file_name.rb
然后我注意到我的数据库是我们的订单,所以我在 SO 上找到了包含 ID:
rails db:seed:dump FILE=db/seeds/my_db_file_name.rb EXCLUDE=[]
在我想将新记录添加到我的数据库之前似乎很好。原来重置主键解决了这个问题:
def reset_pk
ActiveRecord::Base.connection.tables.each do |t|
ActiveRecord::Base.connection.reset_pk_sequence!(t)
end
redirect_to root_url
end
我现在要做的是简化转储过程,至于现在,每次我转储数据库时,记录都是“乱序”的,我将在下面解释。
假设我有两个模型:Lab 和 Offer。实验室可以有很多优惠。因此,为了创建一个Offer 对象,我首先必须创建一个Lab 对象。但是当我转储架构时,我的文件如下所示:
Offer.create...
Offer.create...
Offer.create
Lab.create...
Lab.create...
Lab.create...
如果我尝试播种,它不会这样做,因为优惠是在实验室之前创建的,应该是另一种方式。
我的问题是,有没有办法在转储数据库的同时真正保持关系,以便首先创建实验室?
编辑
我设法做到了这样的事情:
rails db:seed:dump FILE=db/seeds/my_db_file_name.rb EXCLUDE=[] MODELS="Lab, Offer"
这个保持我想要的顺序,但我想知道是否有一种简单的方法(如果有 15、20 个模型而不是只有 2 个)。
【问题讨论】:
-
你为什么需要一个 Ruby 文件呢?为什么不使用数据库的备份/转储工具?
-
我对 rails 和 heroku 的东西比较陌生,我想把这个数据库放在一个文件中,以防我搞砸了。我确实使用
heroku pg:pull DATABASE_URL databasename --app my_app_name从heroku 获取数据库,但正如我所说,只需再采取一步以确保我不会删除所有记录。 -
所以您使用
pg:pull将数据库复制到本地PostgreSQL?为什么不用pg_dump转储本地数据库? -
@Ancinek 您已经将数据库“放在一个文件中”,采用您将要获取的最佳和最有用的格式。将其移入 Ruby 是一个使您的数据较少可靠和可用的毫无意义的练习。没有理由这样做。
-
谢谢你的回答。我想我会停止这样做,因为正如你所说,没有理由这样做。我有一个heroku备份以防万一。无论如何感谢 pg_dump 选项。不知道!
标签: ruby-on-rails ruby