我正处于学习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
将数据投入生产的简单情况。