У меня была эта ошибка, когда я создал файл pkl с python 2.7 и пытался прочитать его с помощью python 3.6. Я сделал:
pd.read_pickle('foo.pkl')
, и он работал
Необходимо смочь использовать
rake db:migrate:up
чтобы вынудить это продвинуться, но затем Вы рискуете пропускать чередованные миграции от других людей в Вашей команде
если Вы работаете
rake db:migrate
дважды, это повторно применит все Ваши миграции.
Я встречаюсь с тем же поведением на окнах с 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
в Ruby
ENV["VERSION"] # => V3.5.0f
ENV["VERSION"].to_i #=>0 not nil !
таким образом вызовы задачи граблей
ActiveRecord::Migrator.migrate("db/migrate/", 0)
и в ActiveRecord:: Мигрант мы имеем:
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
Редактирование - я пошел бы, обновляют ошибку маяка, но я, которого супер прокси компании запрещает этому, я соединяюсь там
Тем временем можно попытаться сбросить Версию перед вызовом, мигрируют...
Я почтительно не соглашаюсь Tom! это - ошибка!! V3.5.0f не является действительной версией для миграций граблей. Грабли не должны использовать его для migrate:down просто, потому что рубин принял решение полагать, что "V3.5.0f".to_i 0...
Грабли должны громко жаловаться, что ВЕРСИЯ не действительна так, чтобы пользователи знали то, что произошло (между нами, проверяя, что версия является YYYYMMDD, форматированная метка времени путем преобразования в целое число немного легка),
[Прокляните IE6, который не позволит мне комментировать! и не я не могу изменить браузер спасибо, корпоративное]
Это не ожидаемое поведение. Я собирался предложить сообщить об этом как об ошибке на маяке, но я вижу, что Вы уже сделали так! Если Вы предоставите еще некоторую информацию (включая версию ОС/базы данных/рубина), то я буду смотреть на нее.
Jean,
Большое спасибо за Ваше расследование. Вы правы, и на самом деле я думаю, что Вы раскрыли более серьезную ошибку разновидностей 'ошибка дизайна'.
То, что происходит, - то, что грабли захватят любое значение, которое Вы передаете командной строке и храните их как переменные среды. Задачи граблей, которые в конечном счете назовут, просто вытянут, это оценивает от переменной среды. Когда db:migrate запрашивает ENV ["ВЕРСИЯ"], это на самом деле запрашивает параметр версии, который Вы устанавливаете грабли вызова. При вызове граблей db:migrate Вы не передаете версии.
Но у нас действительно есть переменная среды под названием ВЕРСИЯ, которая была установлена для других целей некоторой другой программой (я не делаю который все же). И парни позади граблей (или позади database.rake) не полагали, что это произошло бы. Это - ошибка дизайна. По крайней мере, они, возможно, использовали более определенные имена переменной как "RAKE_VERSION" или "RAKE_PARAM_VERSION" вместо просто "ВЕРСИИ".
Tom, я определенно не закрою, но отредактирую свой отчет об ошибках на маяке для отражения этих новых результатов.
И еще раз спасибо Jean для Вашей справки. Я отправил эту ошибку на маяке как 5 дней agao и все еще не получил ответа!
Rollo