将新表推送到 heroku,而无需重置现有数据库



我正处于学习RoR和使用Heroku的早期阶段。 所以我有一个带有本地和生产数据库的初出茅庐的应用程序。 我已经使用pg:push来创建初始生产数据库,但我很欣赏这需要您每次重置数据库。 我现在在本地数据库中有一个新表,我希望将其推送到生产环境,但我不想重置并丢失数据。

似乎我可以从生产中创建备份,然后重新加载。 或者可以运行pg:pull将数据放入我的本地数据库,然后运行pg:push以便在添加新表时也重新加载现有数据。

这一切似乎有点啰嗦。 根据对 php 和 mysql 的一些了解,我会简单地运行一个 SQL 查询来添加新表,难道没有类似的方法吗?

我认为

您正在寻找的是迁移:

class CreateProducts < ActiveRecord::Migration[5.0]
  def change
    create_table :products do |t|
      t.string :name
      t.text :description
      t.timestamps
    end
  end
end

您可以在本地开发环境中创建迁移,然后在满意后在生产服务器上运行它们。您可以在此处阅读有关迁移的更多信息:

活动记录迁移

一种选择是将pg_dump与--table选项一起使用,以仅转储单个表。将其保存到.sql文件中,然后在要导入到的数据库上运行它。

通常,不建议将数据从开发环境手动移植到生产环境。您可能已经注意到,迁移使数据库结构保持同步,但不会使数据保持同步。

如果应用程序需要一组特定的数据库值,并且您希望在任何环境中设置这些值;则可以设置种子数据。然后是运行heroku run rake db:seed将数据投入生产的简单情况。

最新更新