我将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
。
有什么提示我应该如何解决这个问题?
答案 0 :(得分:0)
如果您没有丢失任何数据,可以从sql控制台中删除这些表并重新运行capistrano部署,或者您可以从服务器手动up
迁移文件
rake db:migrate:up VERSION=20151015124064
其中version是rake db:migrate:status
注意:请记住,你必须在两个案例中删除这些表
答案 1 :(得分:0)
如果您不想丢失数据并重新执行此操作,则可以尝试另一种方法。
迁移标记为up
或down
,具体取决于迁移版本是否作为schema_migrations表中的记录存在。
因此,解决问题的一种方法是添加包含以下内容的文件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
再次尝试运行该迁移。