Есть ли способ пропустить ошибку файла миграции и перейти к следующему файлу (Ruby on rails + mysql)? - PullRequest
0 голосов
/ 10 июня 2019

У меня в приложении 424 файла миграции, некоторые из них работают, а некоторые нет (изменения, внесенные непосредственно в файлы модели), мне нужно запустить все из них как часть решения другой проблемы, проблема в том, что каждый раз, когда один из файлов выходит из строя, он отбрасывает весь процесс.

есть ли способ помимо вставки в schema_migrations миграционных номеров?

1 Ответ

0 голосов
/ 10 июня 2019

Если вам больше не нужна миграция, вы можете просто удалить файл миграции.Если вы используете контроль версий, вы всегда можете удалить его в будущем.Но если вы можете пропустить это в работе, я не знаю, почему вам это когда-нибудь понадобится снова.

Если удаление не является вариантом, значит, оно вам нужно, и это нужно исправить.Миграции никогда не должны ссылаться на модели в каталоге app по точной причине, которую вы описываете.Модели могут измениться так, что старые миграции потерпят неудачу

Если вы можете исправить миграцию для работы с использованием чистого SQL, это лучший вариант.

Если вам по какой-то причине нужно использовать модель AR, вы должны объявить минимальную модель при миграции только с тем, что вам нужно.Таким образом, ваша миграция изолирована от любых будущих изменений модели.Вот простой пример.В этом случае я бы просто использовал SQL, но для демонстрации:

class UpdateUserDisplayNames < ActiveRecord::Migration
  # Any reference to User in the scope of this migration will
  # reference this class, insulating the migration from changes
  # to the User class in app/models
  class User < ApplicationRecord; end;

  def up
    User.find_each do |u|
      u.update!(display_name: "#{u.first_name} #{u.last_name}"
    end
  end
end
...