Ruby on rails 如何将本地表架构_迁移中的数据推送到Heroku DB?
我能够将我的RubyonRails应用程序和MySQL(本地开发)一起推送到Heroku服务器,同时使用命令Ruby on rails 如何将本地表架构_迁移中的数据推送到Heroku DB?,ruby-on-rails,heroku,Ruby On Rails,Heroku,我能够将我的RubyonRails应用程序和MySQL(本地开发)一起推送到Heroku服务器,同时使用命令Heroku rake db:migrate迁移我的模型。我还阅读了有关的文档。那个文档是指将实际数据从本地开发数据库推送到Heroku的数据库吗?我是否需要修改文件database.yml中的任何内容才能实现它 我运行了以下命令: heroku db:push 我得到了一个错误: Sending data 2 tables, 3 records !!! Caught Server
Heroku rake db:migrate
迁移我的模型。我还阅读了有关的文档。那个文档是指将实际数据从本地开发数据库推送到Heroku的数据库吗?我是否需要修改文件database.yml
中的任何内容才能实现它
我运行了以下命令:
heroku db:push
我得到了一个错误:
Sending data
2 tables, 3 records
!!! Caught Server Exception | ETA: --:--:--
Taps Server Error: PGError ERROR: duplicate key value violates unique constraint
"unique_schema_migrations"
我有两个表,一个是为我的应用程序创建的,另一个是schema\u migrations
。两个表中的条目总数为3。我还在打印我创建的表中的条目数,它显示为0
你知道我可能遗漏了什么或者我做错了什么吗
编辑:
我发现,从我运行migrate的那一刻起,Heroku的DB就已经有了schema\u迁移
新问题:有人知道如何将特定表中的数据排除到Heroku DB中吗。在这种情况下要排除的表将是schema\u migrations
不太好的解决方案:
我在谷歌上搜索,其他人也有同样的问题。他建议将schema\u迁移
表命名为zschema\u迁移
。通过这种方式,其他表中的数据将被正确推送,直到最后一个表中的数据失败为止。这是一个相当糟糕的解决方案,但暂时可以
更好的解决方案是使用现有的Rails命令,该命令可以从数据库中重置特定的表。我认为Rake不能做到这一点。这是一种基于错误的猜测,但是推送看起来像是抓取了模式和数据。我会尝试推送到一个空数据库。两个可能的选项:
gem和gem(它用来同步数据库)都是开源的——您可以将它们分叉,修改taps客户端API以支持从推送中排除表,然后修改heroku gem以使用该新选项
您可以编写一个包装器脚本,用于备份schema_migrations表,删除该表,heroku push
es数据库,然后重新加载该表
我刚刚在heroku的新竹服务器上部署了一个Rails 3测试版应用程序。现在,我可以通过以下操作将数据从本地开发机器上载到heroku数据库:
heroku rake db:fixtures:load test/fixtures/my_model.yml
然后在Heroku数据库中正确传播数据。即使我指定了一个特定的数据文件,它也会自动从我的其他yaml文件中推送数据。这可能与我的模型关系有关。如果您的数据库不同步,您可以在使用之前重置Heroku数据库
heroku db:reset
从特定桌子上推/拉
heroku db:pull——表、日志、标记
这样可以帮我弄清楚到底发生了什么。当我第一次运行db:migrate
时,表schema\u migrations
在Heroku数据库上创建。当我尝试推送本地数据时,它失败了,因为我在本地schema_migrations
中的值是Heroku的副本。我现在需要知道如何从schema\u migrations
表中排除push模式和数据。如果使用db:push,我认为它将创建整个数据库。这意味着您不需要运行db:migrate。创建数据库后立即推送-在本例中,我认为这意味着在创建Heroku应用程序后立即推送。我尝试过,但它抱怨Heroku服务器上尚未创建架构,这就是为什么运行迁移似乎是第一步。为什么您试图以这种方式将数据推送到生产应用程序?我的网站是由内容驱动。有时,我想在实时推送它之前,看看它在本地开发服务器上的显示情况。支持将数据推送到Heroku,如他们的doc:ugh所示。只是碰到了同样的问题。我能够用fixture推送数据,见下面我的答案。