我正在按照此指南将现有站点从本地存储上传文件迁移到 S3 存储。新上传的文件工作正常,我已手动检查确认它们已显示在 S3 中。但是,当我尝试运行 rake uploads:migrate_to_s3 时,我收到以下输出:
请注意,迁移到 S3 目前是不可逆的!
[CTRL+c] 取消,[ENTER] 继续
正在为 'default' 迁移上传到 S3...
一些上传未迁移到新方案。正在运行迁移,这可能需要一段时间...
rake 中断!
FileStore::ToS3MigrationError: 一些上传无法迁移到新方案。您需要手动修复此问题。
/var/www/discourse/lib/file_store/to_s3_migration.rb:162:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:65:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:127:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:106:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:90:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:104:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:100:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => uploads:migrate_to_s3
(运行任务时显示 --trace 以查看完整跟踪)
查看错误源文件 lib/file_store/to_s3_migration.rb,我看到它似乎正在对 uploads 表运行一个检查,其中 url NOT LIKE '//%' AND url NOT LIKE '/%#{seeded_image_url}%'。在我的情况下,我假设 seeded_image_url 解析为 uploads/default/original/_X/。
我手动对数据库运行了相同的检查,并发现了以下内容:
我不担心下面两个,我猜那些只是切换过程中的偶然伪影——如果它们没有
url,那么站点就不知道在哪里找到它们,所以可以安全地删除它们。我更关心的是徽标。这些是默认徽标,我们实际上仍在继续使用它们,但它们是随代码库分发的,而不是上传的。
在 to_s3_migration.rb 的第 146 行添加第三个条件,该条件也忽略 URL 列以 /images/ 开头的上传,是否安全?或者我应该删除那些行,因为那些文件现在是独立于上传处理的,而这只是旧版本 Discourse 的伪影?或者我误解了这个任务的作用(我对 Rails 不太熟悉),问题是别的东西?
