грабли db:migrate не обнаруживают новую миграцию?

У меня была эта ошибка, когда я создал файл pkl с python 2.7 и пытался прочитать его с помощью python 3.6. Я сделал:

pd.read_pickle('foo.pkl')

, и он работал

6
задан Hugo Dozois 19 September 2014 в 00:33
поделиться

4 ответа

Необходимо смочь использовать

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

Редактирование - я пошел бы, обновляют ошибку маяка, но я, которого супер прокси компании запрещает этому, я соединяюсь там

Тем временем можно попытаться сбросить Версию перед вызовом, мигрируют...

1
ответ дан 17 December 2019 в 20:36
поделиться

Я почтительно не соглашаюсь Tom! это - ошибка!! V3.5.0f не является действительной версией для миграций граблей. Грабли не должны использовать его для migrate:down просто, потому что рубин принял решение полагать, что "V3.5.0f".to_i 0...

Грабли должны громко жаловаться, что ВЕРСИЯ не действительна так, чтобы пользователи знали то, что произошло (между нами, проверяя, что версия является YYYYMMDD, форматированная метка времени путем преобразования в целое число немного легка),

[Прокляните IE6, который не позволит мне комментировать! и не я не могу изменить браузер спасибо, корпоративное]

1
ответ дан 17 December 2019 в 20:36
поделиться

Это не ожидаемое поведение. Я собирался предложить сообщить об этом как об ошибке на маяке, но я вижу, что Вы уже сделали так! Если Вы предоставите еще некоторую информацию (включая версию ОС/базы данных/рубина), то я буду смотреть на нее.

0
ответ дан 17 December 2019 в 20:36
поделиться

Jean,

Большое спасибо за Ваше расследование. Вы правы, и на самом деле я думаю, что Вы раскрыли более серьезную ошибку разновидностей 'ошибка дизайна'.

То, что происходит, - то, что грабли захватят любое значение, которое Вы передаете командной строке и храните их как переменные среды. Задачи граблей, которые в конечном счете назовут, просто вытянут, это оценивает от переменной среды. Когда db:migrate запрашивает ENV ["ВЕРСИЯ"], это на самом деле запрашивает параметр версии, который Вы устанавливаете грабли вызова. При вызове граблей db:migrate Вы не передаете версии.

Но у нас действительно есть переменная среды под названием ВЕРСИЯ, которая была установлена для других целей некоторой другой программой (я не делаю который все же). И парни позади граблей (или позади database.rake) не полагали, что это произошло бы. Это - ошибка дизайна. По крайней мере, они, возможно, использовали более определенные имена переменной как "RAKE_VERSION" или "RAKE_PARAM_VERSION" вместо просто "ВЕРСИИ".

Tom, я определенно не закрою, но отредактирую свой отчет об ошибках на маяке для отражения этих новых результатов.

И еще раз спасибо Jean для Вашей справки. Я отправил эту ошибку на маяке как 5 дней agao и все еще не получил ответа!

Rollo

0
ответ дан 17 December 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: