Rails每次重新启动服务器时都需要迁移

时间:2019-06-25 17:21:52

标签: ruby-on-rails ruby-on-rails-5

将我的应用程序部署到heroku时,出现一些有关迁移的错误。

这样我将所有迁移结合在一起,只保留包含所有finally属性的创建表文件,删除编辑表。

现在,每次重新启动服务器(本地主机)时,我都必须再次db:migrate才能正常工作。

当我只使用db:migrate时,错误提示:table 'product' already existed' 所以我必须先db:drop,然后db:migrate才能使我的应用正常工作 我花了很多时间。 我该如何解决这个问题? 这是我的迁移状态:

up 20190306060445 ********** NO FILE ********** down 20190306060545 Create product up 20190307035103 Create active storage tablesactive storage up 20190308045037 ********** NO FILE ********** up 20190308071304 ********** NO FILE ********** down 20190308072304 Devise create users up 20190308074025 Devise create admins down 20190308082018 Create categories up 20190308083018 ********** NO FILE ********** up 20190311041416 ********** NO FILE ********** up 20190313084429 Create payment up 20190314024236 Create cart up 20190314024911 Create cart product up 20190314035334 Create messages up 20190314145333 Create payment item up 20190314151340 ********** NO FILE ********** up 20190315020606 ********** NO FILE ********** up 20190318073652 Create voucher up 20190319035819 ********** NO FILE ********** up 20190319134032 Contacts up 20190320034249 ********** NO FILE ********** up 20190320062223 ********** NO FILE ********** up 20190325132236 ********** NO FILE ********** up 20190325155829 ********** NO FILE ********** up 20190329095529 ********** NO FILE ********** up 20190329110656 ********** NO FILE ********** up 20190330145000 ********** NO FILE ********** up 20190331162926 ********** NO FILE ********** up 20190408155326 ********** NO FILE ********** up 20190419055934 ********** NO FILE ********** up 20190419060341 ********** NO FILE ********** up 20190502105847 ********** NO FILE ********** up 20190502110019 Add stock up 20190506114910 ********** NO FILE ********** up 20190506115146 ********** NO FILE ********** up 20190506115302 ********** NO FILE ********** up 20190513042021 ********** NO FILE ********** up 20190513050115 ********** NO FILE ********** up 20190514025220 ********** NO FILE ********** up 20190514031046 ********** NO FILE ********** up 20190516010239 Create comment up 20190516020021 ********** NO FILE ********** up 20190517132706 Create notification up 20190524152143 Create brands up 20190527040142 ********** NO FILE ********** up 20190528113143 Add columns devise up 20190528113658 Add columns devise 1 up 20190531125307 Create news up 20190531144908 Create ckeditor assets up 20190601100118 Create news products up 20190602144319 Create type of news up 20190602155208 ********** NO FILE ********** up 20190603062824 ********** NO FILE ********** up 20190606172629 ********** NO FILE ********** up 20190607074100 ********** NO FILE ********** up 20190607122350 ********** NO FILE ********** up 20190607140214 ********** NO FILE ********** up 20190608082804 ********** NO FILE ********** up 20190609051100 Add omniauth to users up 20190611115405 ********** NO FILE ********** up 20190612071933 Create table carousels up 20190612100433 ********** NO FILE ********** up 20190613082404 ********** NO FILE ********** up 20190614131413 ********** NO FILE ********** up 20190615161828 ********** NO FILE ********** up 20190617154212 Create district up 20190617154602 Create province up 20190619140034 Create ward up 20190620134528 ********** NO FILE ********** down 20190620140214 Convert tables to utf8 v1 up 20190622123753 ********** NO FILE **********

1 个答案:

答案 0 :(得分:0)

在更改所有迁移时,您创建了“新”迁移。 0.0试图将这些“新”迁移应用于已存在的数据库。 (已应用的迁移列表保存在rails db:migrate表中)。我们可以看到所有schema_migrations迁移都是尚未应用的。包括down

由于这是一个正在运行的生产数据库,因此推测down 20190306060545 Create product表已经存在。当Rails运行迁移product(可能尝试进行20190306060545 Create product时,它将失败,因为create_table :product已经存在。

避免这种情况的一种方法是,首先检查表是否存在于“创建表”迁移中。如果可以,则什么也不做。

product

要在开发中重现此事...

  • 查看原始迁移。
  • 从中创建一个新的架构:if table_exists?(:product) return end
  • 查看您的新组合迁移。
  • 尝试迁移:rails db:migrate:reset