我尝试使用Sequel来管理我的数据库的迁移,有时,由于功能分支,有时候数据库应用的迁移不会存在于文件系统中。
默认情况下,当我在这些情况下使用sequel -m
应用迁移时,我收到此错误:
Error: Sequel::Migrator::Error: Applied migration files not in file system
" Migrations"说有一个选择:
忽略丢失的迁移
在某些情况下,您可能希望允许在数据库中进行文件系统中不存在的迁移(例如,在部署自动迁移时部署到较旧版本的代码而不运行向下迁移)。如果需要,您可以传递:allow_missing_migration_files =>是一个选项。如果数据库中存在文件系统中不存在的迁移,这将阻止引发错误。
尼斯!
如何将allow_missing_migration_files
选项传递给sequel -m
?
答案 0 :(得分:1)
我认为您必须使用Sequel::Migrator API
。像
Sequel::Migrator.run(DB, '/path/to/migrations/dir', allow_missing_migration_files: true)
您还可以将此行为包装在Rake任务中,这样您就不必启动控制台来运行迁移。
namespace :db do
desc "Run migrations ignoring the missing ones"
task :migrate_without_missing, [:version] do |t, args|
require "sequel"
Sequel.extension :migration
db = Sequel.connect(ENV.fetch("DATABASE_URL"))
if args[:version]
puts "Migrating to version #{args[:version]}"
Sequel::Migrator.run(db, "db/migrations", target: args[:version].to_i, allow_missing_migration_files: true)
else
puts "Migrating to latest"
Sequel::Migrator.run(db, "db/migrations", allow_missing_migration_files: true)
end
end
end
然后运行rake db:migrate_without_missing
。