【问题标题】:Push new table to heroku without having to reset existing database将新表推送到heroku,而无需重置现有数据库
【发布时间】:2017-08-26 14:11:38
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我认为您正在寻找的是迁移:

    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

    【讨论】:

    • 我了解迁移,问题更多在于我已经在本地迁移了一个新表,并希望更新生产方案以反映它。
    • 我认为这正是迁移的目的。您在本地运行它,检查一切是否正常,然后将其提交到您的仓库中,将其推送到 heroku 并在那里运行。它甚至比“手动”更安全,因为如果出现问题,您可以回滚。
    • 好吧好吧。也许我不明白的是当你说在 Heroku 上运行它的时候?
    • 根据您的 Rails 版本,您可以运行:heroku run bundle exec rake db:migrate 用于 Rails4 或 heroku run bundle exec rails db:migrate 用于 Rails5
    • 你需要有 heroku 工具带:devcenter.heroku.com/articles/heroku-cli
    【解决方案2】:

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

    一般来说,不建议手动将数据从开发移植到生产。您可能已经注意到,迁移使您的数据库结构保持同步,而不是数据。

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

    【讨论】:

    • 真的只是我要更新的schema,不用担心表中的数据。而且我只是在考虑可能会添加新表或想在生产中向现有表中添加列等的时间。我是否缺少一些非常简单的东西!
    猜你喜欢
    • 2013-04-05
    • 2020-12-30
    • 2015-10-23
    • 2016-04-29
    • 2013-10-29
    • 2021-05-07
    • 2016-05-28
    • 2014-02-02
    • 2016-03-30
    相关资源
    最近更新 更多