Slide 1

Slide 1 text

AR migrationの例外 @bary822

Slide 2

Slide 2 text

どんなの?

Slide 3

Slide 3 text

PendingMigrationError IrreversibleMigration UnknownMigrationVersionError

Slide 4

Slide 4 text

まだまだある

Slide 5

Slide 5 text

IllegalMigrationNameError - unless /^[_a-z0-9]+$/.match?(file_name) の時に発生 # A migration file name can only contain underscores (_), lowercase characters, and numbers 0-9. Any other file name will raise an IllegalMigrationNameError.

Slide 6

Slide 6 text

DuplicateMigrationNameError - 同じ名前のmigrationが2つ以上存在した時にraiseされる version, = migrations.group_by(&:name).find { |_, v| v.length > 1 } raise DuplicateMigrationVersionError.new(version) if version

Slide 7

Slide 7 text

ConcurrentMigrationError - 他のmigrationが実行中で、DBのlockがとれなかった時に発生 - 実行中のmigrationでdead lockが発生した時もそのケース

Slide 8

Slide 8 text

ここからチョット毛色が違う

Slide 9

Slide 9 text

ProtectedEnvironmentError - protected environment(デフォルトではproduction)に対してdb:drop, db:purge などのリスクが高い操作を行おうとすると発生 - DBの環境情報はinternal_metadata tableに入っている mysql> SELECT * FROM ar_internal_metadata; +-------------+-------------+---------------------+---------------------+ | key | value | created_at | updated_at | +-------------+-------------+---------------------+---------------------+ | environment | development | 2018-08-23 03:01:21 | 2018-08-23 03:01:21 | +-------------+-------------+---------------------+---------------------+ 1 row in set (0.00 sec)

Slide 10

Slide 10 text

ProtectedEnvironmentError 導入の背景 https://github.com/rails/rails/pull/22967

Slide 11

Slide 11 text

おまけ - DuplicateMigrationNameErrorをhookしてrename