gravitystorm left a comment (openstreetmap/openstreetmap-website#5667)
In my own projects, we use a different approach for data migrations.
* First, we avoid using rails built-in database migrations. These are great for
structure changes, but not for data changes, since they can't be tested. And
there's often some edge cases that we want to have confidence about before we
run the data migration and tests are the foundation for confidence.
* We create a job to migrate the data, so that it runs in a background process.
We have a rake task that simply queues the job and nothing else. This is
because rake tasks are convenient for us to run, but again are very hard to
test. Jobs are easy to test.
* We have a separate queue for slow jobs, with a separate set of workers, so
that if it takes e.g. 10min to run we are still sending out confirmation emails
in the meantime.
* For the task itself, we write it in a way that it can be retried multiple
times. So for example we only select the objects that have not yet been
migrated (e.g. `Note.where(description: nil).in_batches`) so that if the job is
retried, it starts from where it left off, not from the start again.
We do this because in so many cases either we forgot about an edge case but
picked it up in testing, or there turns out to be some unexpected data that
messes things up (an example would be a note with no comments, even if there's
no way that could have happened, in theory, somehow it always does). It also
avoid any worries about locks, long-running transactions, transactions with
large amounts of uncommitted changes, timeouts, network interruptions, db
process restarts and so on.
I say all this to provide an alternative approach that I know works. But in
this case, since @tomhughes will be running the actual migration process,
whatever approach he prefers is what we should do!
--
Reply to this email directly or view it on GitHub:
https://github.com/openstreetmap/openstreetmap-website/pull/5667#issuecomment-2659898440
You are receiving this because you are subscribed to this thread.
Message ID:
<openstreetmap/openstreetmap-website/pull/5667/c2659898...@github.com>
_______________________________________________
rails-dev mailing list
rails-dev@openstreetmap.org
https://lists.openstreetmap.org/listinfo/rails-dev