Я перенес файлы из одного S3-бакета в другой, следуя рекомендациям из этого обсуждения. С дополнительной помощью команд uploads:recover_from_tombstone и posts:rebake я практически восстановил всё – но не полностью.
Я не разработчик на Ruby, поэтому мои возможности по отладке ограничены. При запуске uploads:recover теперь я получаю множество сообщений вроде этих:
Warning /t/foo/489/5 had an incorrect 4ff3ad05b76e1888161f41fd86da66efc16c290c should be 0b029ef3549e72dd5e3498abc7f979736d279a5e storing in custom field ‘rake uploads:fix_relative_upload_links’ can fix this
Warning /t/bar/498/4 had an incorrect 0649edb23196a8c84a9d71c04147bd8f0c96d0f7 should be f5b4e4bb3eedcd0fb83a06eecc4920f20c5e2bc4 storing in custom field ‘rake uploads:fix_relative_upload_links’ can fix this
Warning /t/bar/498/4 had an incorrect 0649edb23196a8c84a9d71c04147bd8f0c96d0f7 should be f5b4e4bb3eedcd0fb83a06eecc4920f20c5e2bc4 storing in custom field ‘rake uploads:fix_relative_upload_links’ can fix this
Эти предупреждения, похоже, соответствуют постам с битыми загрузками, что звучит обнадеживающе. Однако при запуске fix_relative_upload_links ничего не происходит.
rake uploads:fix_relative_upload_links --trace
** Invoke uploads:fix_relative_upload_links (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute uploads:fix_relative_upload_links
skipping missing upload in https://foo.com/t/bar/7/2 <img src="/uploads/default/35/f450f88541e87c52.png" width="198" height="70">
skipping missing upload in https://foo.com/t/bar/7/2 <img src="/uploads/default/36/0b73d33d9df37a66.png" width="120" height="43">
(Я полагаю, что два пропущенных файла — это старые загрузки, сделанные до перехода на S3. Для загрузок из S3, которые вызвали предыдущие предупреждения, вывода вообще нет.)
Существует сообщение о похожей проблеме годичной давности, но я не нашел аналогичных сообщений с решением.
Я понимаю, что делаю то, что официально не поддерживается, но буду благодарен за любые советы.
Я заметил эту проблему лишь через несколько дней после миграции. Если бы я обнаружил её сразу, то попробовал бы повторить миграцию с помощью свежего восстановления базы данных/S3, но так как я не хочу терять недавние посты, мне придется работать с работающим сайтом.
Спасибо.
Редакция: Я также попробовал конвертировать битые URL-адреса upload:// и сравнить их с записями в таблице uploads, но это мне мало что прояснило.
Когда я проверяю рабочий URL upload://, он соответствует записи в таблице uploads с корректным URL, но при проверке битого URL… он также соответствует записи с корректным URL. Кажется, что в БД есть валидные данные, и файлы действительно существуют на S3 по адресу, указанному в таблице uploads. Я могу открыть эти URL-адреса S3 в браузере без проблем, поэтому я не понимаю, почему они не загружаются.