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

时间:2017-04-01 09:56:13

标签: ruby-on-rails postgresql heroku rails-postgresql

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

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

所有这些看起来有点长啰嗦。从php和mysql的一些知识,我会简单地运行SQL查询来添加新表,是不是有类似的方法?

2 个答案:

答案 0 :(得分:0)

我认为你要搜索的是迁移:

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

      t.timestamps
    end
  end
end

您可以在本地开发环境中创建迁移,然后在满意后在生产服务器上运行它们。您可以在此处详细了解迁移:

Active Record Migrations

答案 1 :(得分:0)

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

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

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