我将Spree Commerce从3.0版升级到3.1版,但忘记从本地开发环境中签入Git上的迁移文件
相反,我在服务器上生成了迁移文件;我最终将开发环境中的迁移提交到 git,但现在我在部署时遇到了各种问题,因为它试图在表存在时运行迁移。
我想我真的不需要迁移来运行,因为它在服务器上?
在服务器上运行rake db:migrate:status
显示:
up 20151015124064 Add meta title to page.spree static content
up 20151015124065 Add render as partial for layout for spree pages.spree static content
up 20151015124066 Add pages stores.spree static content
down 20160707102753 Create spree store credits.spree
down 20160707102754 Create spree store credit categories.spree
down 20160707102755 Create spree store credit events.spree
down 20160707102756 Create spree store credit types.spree
down 20160707102757 Add missing indexes.spree
down 20160707102758 Remove duplicated indexes from multi columns.spree
down 20160707102759 Remove user index from spree state changes.spree
down 20160707102760 Add position to spree payment methods.spree
down 20160707102761 Add taxable adjustment total to line item.spree
down 20160707102762 Migrate payment methods display.spree
down 20160707102763 Spree payment method store credits.spree
down 20160707102764 Rename has and belongs to associations to model names.spree
down 20160707102765 Spree store credit types.spree
down 20160707102766 Add discontinued to products and variants.spree
down 20160707102767 Remove shipping method id from spree orders.spree
down 20160707102768 Add id column to earlier habtm tables.spree
down 20160707102769 Add indexes.spree
down 20160707102770 Add missing indices on user.spree auth
down 20160707102771 Remove show in footer from spree pages.spree static content
在我的定位机器上,它显示:
up 20151015124064 Add meta title to page.spree static content
up 20151015124065 Add render as partial for layout for spree pages.spree static content
up 20151015124066 Add pages stores.spree static content
up 20160707102753 Create spree store credits.spree
up 20160707102754 Create spree store credit categories.spree
up 20160707102755 Create spree store credit events.spree
up 20160707102756 Create spree store credit types.spree
up 20160707102757 Add missing indexes.spree
up 20160707102758 Remove duplicated indexes from multi columns.spree
up 20160707102759 Remove user index from spree state changes.spree
up 20160707102760 Add position to spree payment methods.spree
up 20160707102761 Add taxable adjustment total to line item.spree
up 20160707102762 Migrate payment methods display.spree
up 20160707102763 Spree payment method store credits.spree
up 20160707102764 Rename has and belongs to associations to model names.spree
up 20160707102765 Spree store credit types.spree
up 20160707102766 Add discontinued to products and variants.spree
up 20160707102767 Remove shipping method id from spree orders.spree
up 20160707102768 Add id column to earlier habtm tables.spree
up 20160707102769 Add indexes.spree
up 20160707102770 Add missing indices on user.spree auth
up 20160707102771 Remove show in footer from spree pages.spree static content
我认为服务器上的迁移状态应该是up
而不是down
。
有什么提示我应该如何处理这个问题吗?
如果您没有任何要丢失的数据,则可以从 sql 控制台中删除这些表并重新运行 capistrano 部署,或者您可以通过以下方式手动up
从服务器迁移文件
rake db:migrate:up VERSION=20151015124064
其中版本是rake db:migrate:status
结果的第二列
注意:请记住,您必须在这两种情况下都删除这些表
如果您不想丢失数据并重新执行,则可以尝试另一种方法。
根据迁移版本是否作为记录存在于schema_migrations表中,将迁移标记为up
或down
。因此,解决问题的一种方法是添加包含以下内容的文件app/models/schema_migration.rb
:
class SchemaMigration < ActiveRecord::Base
self.primary_key = :version
attr_accessible :version
# you can call the method below via console or even call
# or execute the commands directly from the rails console
def self.fix_migrations
# basically a list of all migrations that you run on server but are not marked as up
down_migrations = %w(20160707102753 20160707102754 ... 20160707102771)
down_migrations.each do |m|
# this will add an entry in the schema_migrations datatable
# on server so rake db:migrate won't try to run these again
SchemaMigration.create(version: m)
end
end
end
然后通过 rails 控制台,您执行:SchemaMigration.fix_migrations
.
如果您需要再次运行特定迁移,或者如果您不小心添加了以前从未执行过的迁移版本,您可以随时使用 SchemaMigration.find_by_version('xxxx').delete
从schema_migrations中删除该条目。这将允许rake db:migrate
尝试再次运行该迁移。