ROR: Ошибка при выполнении db:migrate
При запуске последней миграции в RoR под Windows может возникать следующая ошибка:
C:\test>rake db:migrate rake aborted! No migration with version number 2 (See full trace by running task with --trace)
Номер версии в сообщении об ошибке может отличаться от 2. Эта ошибка может появляться даже при запуске миграции в свежесозданном проекте, в котором ни какой версии миграции выше 0 быть не может. Вся проблема оказывается в том что в переменную среды VERSION
, если она не указана явно при выполнении rake db:migrate
записывается какое-то значение. Посмотреть это можно, добавив в файл environment.rb
строку puts ENV['VERSION']
и запустив миграции без указания версии.
Исправляется это недоразумение просто - для миграции до последней версии надо вместо номера версии указать latest
. То есть запускать миграцию следующей командой:
C:\test>rake db:migrate VERSION=latest
Либо немного грубоватый вариант - подправить файл rake (он лежит в папке bin установки Ruby), добавив первой строкой программы:
ENV['VERSION'] = nil
для Rails версии 2.3.5 rake файл будет выглядеть так:
#!C:/WebServer/Ruby/bin/ruby.exe # # This file was generated by RubyGems. # # The application 'rake' is installed as part of a gem, and # this file is here to facilitate running it. # ENV['VERSION'] = nil require 'rubygems' version = ">= 0" if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then version = $1 ARGV.shift end gem 'rake', version load Gem.bin_path('rake', 'rake', version)
Сам воспользовался вторым вариантом - он более простой в использовании, но требует внимания при обновлении версий gems.
- Метки: