Вы должны быть в состоянии использовать
rake db:migrate:up
, чтобы заставить его идти вперед, но тогда вы рискуете пропустить чередующиеся миграции от других людей в вашей команде
если вы запустите
rake db:migrate
дважды, он будет повторно применять все ваши миграции.
Я сталкиваюсь с тем же поведением в Windows с SQLite, это может быть ошибка, характерная для такой среды.
Редактировать - Я нашел почему. В задаче railstie database.rake у вас есть следующий код:
desc "Migrate the database through scripts in db/migrate. Target specific version with VERSION=x. Turn off output with VERBOSE=false."
task :migrate => :environment do
ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
ActiveRecord::Migrator.migrate("db/migrate/", ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
end
Тогда в моих переменных окружения у меня есть
echo %Version% #=> V3.5.0f
в рубине
ENV["VERSION"] # => V3.5.0f
ENV["VERSION"].to_i #=>0 not nil !
таким образом, задача rake вызывает
ActiveRecord::Migrator.migrate("db/migrate/", 0)
и в ActiveRecord :: Migrator у нас есть:
class Migrator#:nodoc:
class << self
def migrate(migrations_path, target_version = nil)
case
when target_version.nil? then up(migrations_path, target_version)
when current_version > target_version then down(migrations_path, target_version)
else up(migrations_path, target_version)
end
end
Да, rake db:migrate VERSION=0
- длинная версия для rake db:migrate:down
Редактировать - Я хотел бы обновить ошибку маяка, но я прокси суперкомпании запрещает подключаться туда
Тем временем вы можете попытаться сбросить версию, прежде чем вызывать миграцию ...