Migration zu S3 schlägt bei Rebake fehl

Mit Hilfe von @itsbhanusharma arbeite ich daran, meine alten Uploads auf S3 zu übertragen.

Ich habe die Schritte in diesem Leitfaden befolgt:

Nach einem Rebuild waren die Uploads immer noch nicht auf S3 verschoben, was seltsam ist. Discourse-doctor meldete ein DNS-Problem:

> 
> ========================================
> Discourse version at : NOT FOUND
> Discourse version at localhost: Discourse 2.5.0.beta4
> **> ==================== DNS PROBLEM ====================**
> **> This server reports Discourse 2.5.0.beta4 , but reports NOT FOUND.**
> **> This suggests that you have a DNS problem or that an intermediate proxy is to blame.**
> **> If you are using Cloudflare, or a CDN, it may be improperly configured.**

Ich habe eine manuelle Migration zu S3 durchgeführt und folgendes erhalten:

 > root@discourse-app:/var/www/discourse# rake --trace uploads:migrate_to_s3
 > ** Invoke uploads:migrate_to_s3 (first_time)
 > ** Invoke environment (first_time)
 > ** Execute environment
 > ** Execute uploads:migrate_to_s3
 > Migrating uploads to S3 for 'default'...
 > Uploading files to S3...
 >  - Listing local files
 > .. => 2980 files
 >  - Listing S3 files
 > .... => 3156 files
 >  - Syncing files to S3
 > ....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
 > Updating the URLs in the database...
 > Warning: no type cast defined for type "name" with oid 19. Please cast this type explicitly to TEXT to be safe for future changes.
 > Removing old optimized images...
 > Flagging all posts containing lightboxes for rebake...
 > 781 posts were flagged for a rebake
 > rake aborted!
 > FileStore::ToS3MigrationError: 68 posts are not remapped to new S3 upload URL. S3 migration failed for db 'default'.
 > /var/www/discourse/lib/file_store/to_s3_migration.rb:131:in `raise_or_log'
 > /var/www/discourse/lib/file_store/to_s3_migration.rb:86:in `migration_successful?'
 > /var/www/discourse/lib/file_store/to_s3_migration.rb:351:in `migrate_to_s3'
 > /var/www/discourse/lib/file_store/to_s3_migration.rb:65:in `migrate'
 > /var/www/discourse/lib/tasks/uploads.rake:239:in `migrate_to_s3'
 > /var/www/discourse/lib/tasks/uploads.rake:218:in `block in migrate_to_s3_all_sites'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.1.2/lib/rails_multisite/connection_management.rb:64:in `with_connection'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rails_multisite-2.1.2/lib/rails_multisite/connection_management.rb:74:in `each_connection'
 > /var/www/discourse/lib/tasks/uploads.rake:216:in `migrate_to_s3_all_sites'
 > /var/www/discourse/lib/tasks/uploads.rake:212:in `block in <top (required)>'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `block in execute'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `each'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:281:in `execute'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
 > /usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:199:in `invoke_with_call_chain'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/task.rb:188:in `invoke'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:160:in `invoke_task'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block (2 levels) in top_level'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `each'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:116:in `block in top_level'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:125:in `run_with_threads'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:110:in `top_level'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:83:in `block in run'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:186:in `standard_exception_handling'
 > /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rake-13.0.1/lib/rake/application.rb:80:in `run'
 > bin/rake:13:in `<top (required)>'
 > /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `load'
 > /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `kernel_load'
 > /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:28:in `run'
 > /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:476:in `exec'
 > /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
 > /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
 > /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
 > /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:30:in `dispatch'
 > /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
 > /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:24:in `start'
 > /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:46:in `block in <top (required)>'
 > /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
 > /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:34:in `<top (required)>'
 > /usr/local/bin/bundle:23:in `load'
 > /usr/local/bin/bundle:23:in `<main>'
 > Tasks: TOP => uploads:migrate_to_s3
 > root@discourse-app:/var/www/discourse#

Hast du dazu eine Meinung, @gerhard?

Es schlägt fehl, weil folgende Prüfung fehlschlägt:

Ich schlage vor, du herausfindest, warum diese Pfade nicht korrekt umgemappt werden. Versuche, Folgendes in der Rails-Konsole auszuführen, um den cooked-Wert dieser Beiträge zu prüfen. Irgendwo darin könnte ein Hinweis sein…

current_db = RailsMultisite::ConnectionManagement.current_db
cdn_path = SiteSetting.cdn_path("/uploads/#{current_db}/original").sub(/https?:/, "")
Post.where("cooked LIKE '%#{cdn_path}%'").pluck(:cooked)

Here’s the output from the rails console: (this is only part of it and it is ugly)

root@discourse-app:/var/www/discourse# rails console
[1] pry(main)> current_db = RailsMultisite::ConnectionManagement.current_db
=> "default"
[2] pry(main)> cdn_path = SiteSetting.cdn_path("/uploads/#{current_db}/original").sub(/https?:/, "")
=> "/uploads/default/original"
[3] pry(main)> Post.where("cooked LIKE '%#{cdn_path}%'").pluck(:cooked)
=> ["<p>U.C. Tricolor frag $30<br>\nRed Stylocoeniella $30<br>\nBranching Cyphastrea $40<br>\nOrenji Mont frag $30</p>\n<hr>\n<p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"//brcuploads.s3.dualstack.us-east-1.amazonaws.com/original/2X/2/282821b1e16dce48ac11f1d607412e1bfed61534.jpeg\" data-download-href=\"/uploads/short-url/5Jf4Z7WaQqYix5IDWN12IlLoYfi.jpeg?dl=1\" title=\"DSCN0069-005.JPG\"><img src=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/2/282821b1e16dce48ac11f1d607412e1bfed61534_2_524x500.jpeg\" alt=\"DSCN0069-005.JPG\" data-base62-sha1=\"5Jf4Z7WaQqYix5IDWN12IlLoYfi\" width=\"524\" height=\"500\" srcset=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/2/282821b1e16dce48ac11f1d607412e1bfed61534_2_524x500.jpeg, https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/2/282821b1e16dce48ac11f1d607412e1bfed61534_2_786x750.jpeg 1.5x, /uploads/default/original/2X/2/282821b1e16dce48ac11f1d607412e1bfed61534.jpeg 2x\" data-small-upload=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/2/282821b1e16dce48ac11f1d607412e1bfed61534_2_10x10.png\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#far-image\"></use></svg><span class=\"filename\">DSCN0069-005.JPG</span><span class=\"informations\">800×762 181 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#discourse-expand\"></use></svg></div></a></div></p>\n<p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"//brcuploads.s3.dualstack.us-east-1.amazonaws.com/original/2X/9/960e0f184917ad7e0bbf2d6c31cf546fa9e124f5.jpeg\" data-download-href=\"/uploads/short-url/lprJZk3t4LfijslovcQ9kgaqzcN.jpeg?dl=1\" title=\"DSCN0119-003.JPG\"><img src=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/9/960e0f184917ad7e0bbf2d6c31cf546fa9e124f5_2_513x500.jpeg\" alt=\"DSCN0119-003.JPG\" data-base62-sha1=\"lprJZk3t4LfijslovcQ9kgaqzcN\" width=\"513\" height=\"500\" srcset=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/9/960e0f184917ad7e0bbf2d6c31cf546fa9e124f5_2_513x500.jpeg, https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/9/960e0f184917ad7e0bbf2d6c31cf546fa9e124f5_2_769x750.jpeg 1.5x, /uploads/default/original/2X/9/960e0f184917ad7e0bbf2d6c31cf546fa9e124f5.jpeg 2x\" data-small-upload=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/9/960e0f184917ad7e0bbf2d6c31cf546fa9e124f5_2_10x10.png\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#far-image\"></use></svg><span class=\"filename\">DSCN0119-003.JPG</span><span class=\"informations\">800×779 186 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#discourse-expand\"></use></svg></div></a></div></p>\n<p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"//brcuploads.s3.dualstack.us-east-1.amazonaws.com/original/2X/5/548f0324f3b0e8dd482729c1d1f5c450b5556919.jpeg\" data-download-href=\"/uploads/short-url/c42vC8e8IRT52htW2RX7YedLpaN.jpeg?dl=1\" title=\"DSCN0072-004.JPG\"><img src=\"//brcuploads.s3.dualstack.us-east-1.amazonaws.com/original/2X/5/548f0324f3b0e8dd482729c1d1f5c450b5556919.jpeg\" alt=\"DSCN0072-004.JPG\" data-base62-sha1=\"c42vC8e8IRT52htW2RX7YedLpaN\" width=\"468\" height=\"500\" data-small-upload=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/5/548f0324f3b0e8dd482729c1d1f5c450b5556919_2_10x10.png\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#far-image\"></use></svg><span class=\"filename\">DSCN0072-004.JPG</span><span class=\"informations\">750×800 180 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#discourse-expand\"></use></svg></div></a></div></p>\n<p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"//brcuploads.s3.dualstack.us-east-1.amazonaws.com/original/2X/d/dc75e2b57072ff260f99cfa9a7cc1e4f39c207f8.jpeg\" data-download-href=\"/uploads/short-url/vshBXgkYrsRhRqNFakI1jgIE5Sg.jpeg?dl=1\" title=\"DSCN0060-005.JPG\"><img src=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/d/dc75e2b57072ff260f99cfa9a7cc1e4f39c207f8_2_396x500.jpeg\" alt=\"DSCN0060-005.JPG\" data-base62-sha1=\"vshBXgkYrsRhRqNFakI1jgIE5Sg\" width=\"396\" height=\"500\" srcset=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/d/dc75e2b57072ff260f99cfa9a7cc1e4f39c207f8_2_396x500.jpeg, https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/d/dc75e2b57072ff260f99cfa9a7cc1e4f39c207f8_2_594x750.jpeg 1.5x, /uploads/default/original/2X/d/dc75e2b57072ff260f99cfa9a7cc1e4f39c207f8.jpeg 2x\" data-small-upload=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/d/dc75e2b57072ff260f99cfa9a7cc1e4f39c207f8_2_10x10.png\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#far-image\"></use></svg><span class=\"filename\">DSCN0060-005.JPG</span><span class=\"informations\">635×800 196 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#discourse-expand\"></use></svg></div></a></div></p>",
 "<p>U.C. Raspberry delight frag $39 “radion”<br>\nORA Kelly green psammacora $39 \"radion<br>\nU.C. Red Dragon Frag $30<br>\nU.C. Red dragon Smaller frag $20</p>\n<hr>\n<p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"//brcuploads.s3.dualstack.us-east-1.amazonaws.com/original/2X/d/deb035a3639a3a3bb8b04ebd9da2b97fb5d8652d.jpeg\" data-download-href=\"/uploads/short-url/vLZwAqgUqcslrwos7Q27gheEVSR.jpeg?dl=1\" title=\"DSCN9908-003.JPG\"><img src=\"//brcuploads.s3.dualstack.us-east-1.amazonaws.com/original/2X/d/deb035a3639a3a3bb8b04ebd9da2b97fb5d8652d.jpeg\" alt=\"DSCN9908-003.JPG\" data-base62-sha1=\"vLZwAqgUqcslrwos7Q27gheEVSR\" width=\"561\" height=\"500\" data-small-upload=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/d/deb035a3639a3a3bb8b04ebd9da2b97fb5d8652d_2_10x10.png\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#far-image\"></use></svg><span class=\"filename\">DSCN9908-003.JPG</span><span class=\"informations\">800×712 165 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#discourse-expand\"></use></svg></div></a></div></p>\n<p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"//brcuploads.s3.dualstack.us-east-1.amazonaws.com/original/2X/e/e579dab30a023f12755b22e8bb1c077b34225110.jpeg\" data-download-href=\"/uploads/short-url/wK2pz5DNtgezJhhQuxaFE52CvnO.jpeg?dl=1\" title=\"DSCN0059-005.JPG\"><img src=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/e/e579dab30a023f12755b22e8bb1c077b34225110_2_450x500.jpeg\" alt=\"DSCN0059-005.JPG\" data-base62-sha1=\"wK2pz5DNtgezJhhQuxaFE52CvnO\" width=\"450\" height=\"500\" srcset=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/e/e579dab30a023f12755b22e8bb1c077b34225110_2_450x500.jpeg, https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/e/e579dab30a023f12755b22e8bb1c077b34225110_2_675x750.jpeg 1.5x, /uploads/default/original/2X/e/e579dab30a023f12755b22e8bb1c077b34225110.jpeg 2x\" data-small-upload=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/e/e579dab30a023f12755b22e8bb1c077b34225110_2_10x10.png\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#far-image\"></use></svg><span class=\"filename\">DSCN0059-005.JPG</span><span class=\"informations\">721×800 231 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#discourse-expand\"></use></svg></div></a></div></p>\n<p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"//brcuploads.s3.dualstack.us-east-1.amazonaws.com/original/2X/e/e5d72072aee537852120d7106522b543e6af9085.jpeg\" data-download-href=\"/uploads/short-url/wNgfm2qrVEyTWGfUV3QAc2EGKfX.jpeg?dl=1\" title=\"DSCN0066-005.JPG\"><img src=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/e/e5d72072aee537852120d7106522b543e6af9085_2_506x500.jpeg\" alt=\"DSCN0066-005.JPG\" data-base62-sha1=\"wNgfm2qrVEyTWGfUV3QAc2EGKfX\" width=\"506\" height=\"500\" srcset=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/e/e5d72072aee537852120d7106522b543e6af9085_2_506x500.jpeg, https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/e/e5d72072aee537852120d7106522b543e6af9085_2_759x750.jpeg 1.5x, /uploads/default/original/2X/e/e5d72072aee537852120d7106522b543e6af9085.jpeg 2x\" data-small-upload=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/e/e5d72072aee537852120d7106522b543e6af9085_2_10x10.png\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#far-image\"></use></svg><span class=\"filename\">DSCN0066-005.JPG</span><span class=\"informations\">800×790 200 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#discourse-expand\"></use></svg></div></a></div></p>\n<p><div class=\"lightbox-wrapper\"><a class=\"lightbox\" href=\"//brcuploads.s3.dualstack.us-east-1.amazonaws.com/original/2X/3/3cd28b0f2704180632ca5e714241b6b62f63459e.jpeg\" data-download-href=\"/uploads/short-url/8G3Jz9KwzbbXzYx3PYei4ayTmSa.jpeg?dl=1\" title=\"DSCN0068-005.JPG\"><img src=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/3/3cd28b0f2704180632ca5e714241b6b62f63459e_2_395x500.jpeg\" alt=\"DSCN0068-005.JPG\" data-base62-sha1=\"8G3Jz9KwzbbXzYx3PYei4ayTmSa\" width=\"395\" height=\"500\" srcset=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/3/3cd28b0f2704180632ca5e714241b6b62f63459e_2_395x500.jpeg, https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/3/3cd28b0f2704180632ca5e714241b6b62f63459e_2_592x750.jpeg 1.5x, /uploads/default/original/2X/3/3cd28b0f2704180632ca5e714241b6b62f63459e.jpeg 2x\" data-small-upload=\"https://d2hneyr8lp58j4.cloudfront.net/optimized/2X/3/3cd28b0f2704180632ca5e714241b6b62f63459e_2_10x10.png\"><div class=\"meta\"><svg class=\"fa d-icon d-icon-far-image svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#far-image\"></use></svg><span class=\"filename\">DSCN0068-005.JPG</span><span class=\"informations\">633×800 139 KB</span><svg class=\"fa d-icon d-icon-discourse-expand svg-icon\" aria-hidden=\"true\"><use xlink:href=\"#discourse-expand\"></use></svg></div></a></div></p>",

Ich denke, ich habe das Problem behoben. Mir ist aufgefallen, dass ich kein Backup ausführen konnte, und ich habe schließlich festgestellt, dass der Name des Backup-Buckets in app.yml falsch geschrieben war. Der Upload-Bucket war in Ordnung. Ich habe die Rechtschreibung korrigiert, und die Backups funktionieren wieder. Ich habe es gerade zum Spaß ausprobiert, und es hat geklappt.

Ich führe gerade ein Re-Bake der Beiträge durch.

Ich sehe das gleiche Problem: Von 49.595 Beiträgen haben nur 17 den Rebuild abgebrochen.

49595 posts were flagged for a rebake
rake aborted!
FileStore::ToS3MigrationError: 17 posts are not remapped to new S3 upload URL. S3 migration failed for db 'default'.
/var/www/discourse/lib/file_store/to_s3_migration.rb:131:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:86:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:357:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:65:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:245:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:224:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-2.5.0/lib/rails_multisite/connection_management.rb:76:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-2.5.0/lib/rails_multisite/connection_management.rb:86:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:222:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:218:in `block in <main>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => uploads:migrate_to_s3
(See full trace by running task with --trace)

Ich bin mir nicht sicher, wonach ich in der Ausgabe des obigen Rails-Befehls suchen soll, @gerhard – hast du dafür einige Hinweise?

Ich erhalte denselben Fehler aufgrund von 3 Beiträgen :confused:

Aktualisiere die URLs in der Datenbank...
Warnung: Kein Typ-Cast für den Typ "name" mit OID 19 definiert. Bitte casten Sie diesen Typ explizit auf TEXT, um für zukünftige Änderungen sicher zu sein.
Entferne alte optimierte Bilder...
Markiere alle Beiträge, die Lightboxen enthalten, für die Neubearbeitung...
123456 Beiträge wurden für eine Neubearbeitung markiert
rake aborted!
FileStore::ToS3MigrationError: 3 Beiträge wurden nicht auf die neue S3-Upload-URL umgemappt. Die S3-Migration für die Datenbank 'default' ist fehlgeschlagen.
/var/www/discourse/lib/file_store/to_s3_migration.rb:131:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:86:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:357:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:65:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:245:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:224:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-2.5.0/lib/rails_multisite/connection_management.rb:76:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-2.5.0/lib/rails_multisite/connection_management.rb:86:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:222:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:218:in `block in <main>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => uploads:migrate_to_s3
(Siehe vollständigen Trace, indem Sie die Aufgabe mit --trace ausführen)

@gerhard – Wenn wir einen solchen Fehler erhalten, wissen Sie dann, ob die Bedeutung „Erfolg! – außer bei 3 Beiträgen

Nachdem ich das ausgeführt habe, kann ich nicht sagen, dass ich etwas sehe, das bei allen gemeinsam vorkommt. Dass sie alle innerhalb von <p>-Tags stehen, ist das Einzige, falls das etwas bedeutet.

Etwas Seltsames war ein Beitrag mit einem Link zu einem Forum-Emoji. Z. B.:
https://www.example.com/images/emoji/twitter/slight_smile.png?v=9


Während ich manuell rake posts:rebake_uncooked_posts nach dem Migrationsfehler aus meinem vorherigen Beitrag ausgeführt habe (ich bin mir nicht sicher, ob rebake das Richtige ist), trat dieser Fehler auf:

Failed to report error: "\x8B" from ASCII-8BIT to UTF-8 3 Job exception: 403 Error:

Darunter befand sich eine Reihe unlesbarer Zeichen. Es läuft noch immer.

@gerhard Hast du vielleicht eine Idee, wie man das Problem beheben kann, dass alle benutzerdefinierten Avatare nach der Migration zu S3 als Standard-Avatare angezeigt werden?

Alles andere wird auf S3 hervorragend dargestellt: Beitragsbilder, Benutzerkarten und Hintergrundbilder der Benutzer. Nur die Avatare werden nicht angezeigt. Es sieht so aus, als wären die ursprünglichen Avatare migriert worden; man kann sie in der Datenbank sehen, und die Dateien existieren auf S3. Es scheint also nur ein Problem mit den optimierten Versionen zu sein. Ich habe gesehen, dass bereits viele Leute dieses Problem hatten, aber ich konnte bisher keine Lösung finden. :sweat_smile:


Update/Bearbeitung:

Ich werde es einfach auf eine gamble setzen und die Migration abschließen, ohne dass die Avatare funktionieren. Neue Avatar-Uploads werden zwar auf S3 gespeichert, aber sie werden ebenfalls nicht angezeigt :confused:

Hoffentlich kann das später irgendwann korrigiert werden.

In den /-Logs sehe ich einige Einträge wie diesen für Avatar-URLs:

Could not find file in the store located at url: //bucketname.s3.fr-par.scw.cloud/original/2X/d/123456.JPG

Die Datei existiert jedoch, wenn ich die URL besuche, und der Dateipfad sieht in Ordnung aus. Ich habe eine weitere Instanz mit denselben Einstellungen (der einzige Unterschied ist der Bucket-Name), und dort funktionieren die Avatare einwandfrei. Der Pfad hat auch auf der anderen Instanz das identische Format (nachdem ich die Uploads in Rails nachgeschlagen habe).

Hoffentlich ist das ein Hinweis darauf, was los ist.

Ich habe eine manuelle Migration nach S3 durchgeführt und das gleiche Ergebnis erhalten, aber ich finde einen Tombstone-Ordner im S3-Bucket. Ist das normal, @gerhard?

Warum diese Pfade nicht korrekt umgemappt wurden:

> current_db = RailsMultisite::ConnectionManagement.current_db
=> "default"
> cdn_path = SiteSetting.cdn_path("/uploads/#{current_db}/original").sub(/https?:/, "")
=> "/uploads/default/original"
> Post.where("cooked LIKE '%#{cdn_path}%'").pluck(:cooked)
=> []

> Aktualisiere die URLs in der Datenbank...
> Warnung: Für den Typ "name" mit OID 19 ist kein Typ-Cast definiert. Bitte casten Sie diesen Typ explizit zu TEXT, um für zukünftige Änderungen sicher zu sein.
> Entferne alte optimierte Bilder...
> Markiere alle Beiträge, die Lightboxes enthalten, für einen Neubake...
> 10855 Beiträge wurden für einen Neubake markiert
> rake aborted!
> FileStore::ToS3MigrationError: 1889 von 6492 Uploads wurden nicht nach S3 migriert. Die S3-Migration für die Datenbank 'default' ist fehlgeschlagen.
> /var/www/discourse/lib/file_store/to_s3_migration.rb:131:in `raise_or_log'
> /var/www/discourse/lib/file_store/to_s3_migration.rb:78:in `migration_successful?'
> /var/www/discourse/lib/file_store/to_s3_migration.rb:357:in `migrate_to_s3'
> /var/www/discourse/lib/file_store/to_s3_migration.rb:65:in `migrate'
> /var/www/discourse/lib/tasks/uploads.rake:123:in `migrate_to_s3'
> /var/www/discourse/lib/tasks/uploads.rake:102:in `block in migrate_to_s3_all_sites'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-2.5.0/lib/rails_multisite/connection_management.rb:76:in `with_connection'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-2.5.0/lib/rails_multisite/connection_management.rb:86:in `each_connection'
> /var/www/discourse/lib/tasks/uploads.rake:100:in `migrate_to_s3_all_sites'
> /var/www/discourse/lib/tasks/uploads.rake:96:in `block in <main>'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/task.rb:281:in `block in execute'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/task.rb:281:in `each'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/task.rb:281:in `execute'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/task.rb:199:in `synchronize'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/task.rb:199:in `invoke_with_call_chain'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/task.rb:188:in `invoke'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/application.rb:160:in `invoke_task'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/application.rb:116:in `block (2 levels) in top_level'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/application.rb:116:in `each'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/application.rb:116:in `block in top_level'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/application.rb:125:in `run_with_threads'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/application.rb:110:in `top_level'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/application.rb:83:in `block in run'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/application.rb:186:in `standard_exception_handling'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/lib/rake/application.rb:80:in `run'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/bin/rake:23:in `load'
> /var/www/discourse/vendor/bundle/ruby/2.7.0/bin/rake:23:in `<top (required)>'
> /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/cli/exec.rb:63:in `load'
> /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/cli/exec.rb:63:in `kernel_load'
> /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/cli/exec.rb:28:in `run'
> /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/cli.rb:494:in `exec'
> /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
> /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
> /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
> /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/cli.rb:30:in `dispatch'
> /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
> /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/cli.rb:24:in `start'
> /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/exe/bundle:49:in `block in <top (required)>'
> /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/lib/bundler/friendly_errors.rb:130:in `with_friendly_errors'
> /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.7/exe/bundle:37:in `<top (required)>'
> /usr/local/bin/bundle:23:in `load'
> /usr/local/bin/bundle:23:in `<main>'
> Tasks: TOP => uploads:migrate_to_s3

Edit: Es sieht so aus, als ob dein Fehler anders war als meiner. Es scheint, als ob einige deiner Bilder nicht auf S3 verschoben wurden. Entschuldigung, ich habe das falsch gelesen. Vielleicht sind einige der Informationen unten trotzdem noch nützlich. Hast du deine S3-Uploads gemäß dieser Anleitung eingerichtet? Configure an S3 compatible object storage provider for uploads

@evenif – Es tut mir leid zu hören, dass du damit Probleme hast. Ich hatte vor, eine Anleitung dafür zu schreiben, da einige Informationen aus verschiedenen Threads zusammengetragen werden mussten. Aber ich warte darauf, hoffentlich die Avatare zu beheben, da ich, wie oben zu sehen, immer noch Probleme damit habe.

Führst du dies in Rails aus, erhältst du dann true oder false?

SiteSetting.migrate_to_new_scheme

Wenn es false ist, kannst du versuchen, es auf true zu setzen, wie folgt:

SiteSetting.migrate_to_new_scheme = true

Dann entweder eine Weile warten und später zurückkehren (ich glaube, dies wird alle 15 Minuten ausgeführt, falls ich mich richtig erinnere), oder wenn du es sofort ausführen möchtest:

Jobs::MigrateUploadScheme.new.execute(nil)

Überprüfe anschließend/später erneut, ob SiteSetting.migrate_to_new_scheme nun false ist (bedeutet, dass es abgeschlossen sein sollte).

Führe dann Folgendes aus:
Upload.by_users.where("url NOT LIKE '//%' AND url NOT LIKE '/uploads/default/original/_X/%'").to_a

Dies sollte Uploads finden, die immer noch Probleme haben und nicht migriert werden konnten. In meinem Fall existierten alle diese Uploads als Datensätze in der Datenbank, aber die eigentlichen Bilder fehlten.

Je nachdem, wie groß die Liste ist, kannst du die Seite kopieren und dann Suchen & Ersetzen verwenden, um eine Liste von Befehlen zu erstellen, um diese problematischen Datensätze über die Liste der Upload-IDs zu entfernen.

Upload.find(1).destroy
Upload.find(2).destroy
Upload.find(3).destroy

Ersetze dabei die Upload-IDs durch 1, 2, 3 usw. Kopiere und füge die gesamte Liste in Rails ein und drücke Enter. Das sollte diese problematischen Datensätze löschen.

Verlasse dann Rails (tippe exit) und alles, was du noch tun musst, ist:

rake posts:rebake
or
rake posts:rebake_uncooked_posts

Uncooked ermöglicht es dir, den Rebake fortzusetzen, falls er fehlschlägt. Ich empfehle einfach den normalen Rebake, es sei denn, du hast eine Menge Uploads.

Dann sollte alles wieder funktionieren, hoffentlich. Es besteht jedoch eine gute Chance, dass deine optimierten Avatare kaputt sind wie bei mir, aber die Originale sollten auf S3 vorhanden sein.

Du kannst überprüfen, ob die Avatare erfolgreich verschoben wurden (zumindest für einige Benutzer), indem du dies in Rails für einen Benutzer ausführst, der ein Standard-Avatar anzeigt:
User.find_by_username('username').uploaded_avatar

Außerdem kannst du prüfen, ob optimierte Versionen existieren, indem du Folgendes verwendest:
OptimizedImage.where(upload_id: upload_id).where(version: 2)

@markersocial Danke für deine Hilfe. Ich denke, mein Problem liegt daran, dass ich den S3-Service bereits früher (seit 2005) genutzt habe, dann auf lokalen Speicher umgestiegen bin und nun wieder S3 verwende. Jetzt verursacht das Hochladen meiner lokalen Bilder nach S3 viele Probleme. Mein S3-Bucket enthält keinen Ordner /uploads/default.

Nach dem Ausführen von uploads:migrate_to_s3 habe ich einige defekte Bilder unter /images/transparent.png entdeckt. Als ich den Befehl rake uploads:recover_from_tombstone verwendete:

erhielt ich folgende Meldung:

Warning /t/topic/6216/4 hatte einen falschen Hash: 338c64ada8cbb0fb99bff79e833a4cc492ead00c, sollte aber c95e4b7c08702db4593332f29b40ca07fb1d9db1 sein. Speichern im benutzerdefinierten Feld. Der Befehl ‘rake uploads:fix_relative_upload_links’ kann dies beheben.

Dann wurde rake abgebrochen mit:

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
Upload not found /uploads/files/general/111/cours-offerts.pdf in Post 23033 - /t/certificate-technique-de-soudage-college-mathieu/11060/1

Ich bin jetzt verwirrt.

Ah :confused: Das Problem liegt außerhalb meines Verständnisses. Ich hoffe, du findest einen Weg, es zu beheben, oder jemand mit mehr Fachwissen kann sich dazu äußern.

Was das Fehlen von /uploads/default in deinem Bucket betrifft, so ist das meiner Meinung nach normal und sollte nicht das Problem sein. Bei meinen Buckets ist es genauso (sowohl bei Instanzen, die zu S3 migriert wurden, als auch bei solchen, die von Anfang an S3 genutzt haben). Du kannst den Pfad des eingebetteten Bildes in diesem Thread überprüfen und wirst sehen, dass auch dort kein /uploads/default im Pfad enthalten ist.

Ich leide ebenfalls unter exakt demselben Problem.

Hast du zufällig wenigstens irgendeine Lösung gefunden???

Falls nicht, bitte ich dich: Falls du irgendeine Lösung findest, teile sie bitte mit mir. Ich wäre dir sehr dankbar.

Ich bin auf ein ähnliches Problem gestoßen, möglicherweise verursacht durch die Migration von AWS S3 → lokal → DO Spaces. Am Ende habe ich etwas Ruby-Code geschrieben, um alte defekte Upload-URLs manuell durch das aktualisierte, funktionierende URL-Format zu ersetzen, und das scheint mein Problem behoben zu haben.

In meinem Fall wurden alle Dateien bei der ersten Migration erfolgreich zu DO Spaces verschoben, aber migrate_to_s3 hat sie als Fehler protokolliert. Dies hat die Anhänge zunächst nicht beeinträchtigt, aber das Ausführen eines Rebuilds hat sie beschädigt. Weitere Details finden Sie im verlinkten Thema.

Ich bekomme diesen Fehler ebenfalls nach dem Importieren einer smf2-Datenbank, dem Aktivieren von S3 und dem Ausführen von rake --trace uploads:migrate_to_s3:

Migriere Uploads zu S3 für 'default'...
Lade Dateien zu S3 hoch...
 - Lokale Dateien auflisten
.. => 2244 Dateien
 - S3-Dateien auflisten
... => 2383 Dateien
 - Dateien zu S3 synchronisieren
....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Aktualisiere die URLs in der Datenbank...
Entferne alte optimierte Bilder...
Markiere alle Beiträge mit Lightboxes zum Neubearbeiten...
454 Beiträge wurden zum Neubearbeiten markiert
rake abgebrochen!
FileStore::ToS3MigrationError: 7165 von 9554 Uploads wurden nicht zu S3 migriert. S3-Migration für db 'default' fehlgeschlagen.
/var/www/discourse/lib/file_store/to_s3_migration.rb:132:in `raise_or_log'
/var/www/discourse/lib/file_store/to_s3_migration.rb:79:in `migration_successful?'
/var/www/discourse/lib/file_store/to_s3_migration.rb:373:in `migrate_to_s3'
/var/www/discourse/lib/file_store/to_s3_migration.rb:66:in `migrate'
/var/www/discourse/lib/tasks/uploads.rake:123:in `migrate_to_s3'
/var/www/discourse/lib/tasks/uploads.rake:102:in `block in migrate_to_s3_all_sites'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-3.1.0/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rails_multisite-3.1.0/lib/rails_multisite/connection_management.rb:90:in `each_connection'
/var/www/discourse/lib/tasks/uploads.rake:100:in `migrate_to_s3_all_sites'
/var/www/discourse/lib/tasks/uploads.rake:96:in `block in <main>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `block in execute'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:281:in `execute'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:219:in `block in invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:199:in `invoke_with_call_chain'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/task.rb:188:in `invoke'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:160:in `invoke_task'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `block (2 levels) in top_level'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `each'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:116:in `block in top_level'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:125:in `run_with_threads'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:110:in `top_level'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:83:in `block in run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:186:in `standard_exception_handling'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/lib/rake/application.rb:80:in `run'
bin/rake:13:in `<top (required)>'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/cli.rb:477:in `exec'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/cli.rb:31:in `dispatch'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/cli.rb:25:in `start'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/exe/bundle:49:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/lib/bundler/friendly_errors.rb:128:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.26/exe/bundle:37:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => uploads:migrate_to_s3

markersocial, wenn ich Upload.by_users.where("url NOT LIKE '//%' AND url NOT LIKE '/uploads/default/original/_X/%'").to_a ausführe, ist die Ausgabe [].

Ich nehme an, das bedeutet, dass mein Problem anders ist als deins?

ipoopfool, ich denke, ich habe möglicherweise dasselbe Problem wie du. Würdest du deinen Ruby-Code, der das für dich behoben hat, teilen? :blue_heart:

Danke.

Wenn ich das Skript ausführe, erhalte ich diesen Fehler:

NameError: undefined local variable or method `upload_regex' for main:Object
from /var/www/discourse/script/discourse-fix-old-broken-uploads.rb:30:in `update_post_upload_links'

Hast du irgendwelche Vorschläge?

Entschuldigung für das Hochholen, ich entferne den Link, den ich zuvor geteilt habe, und dachte, ich kopiere den Code einfach hierher

Beiträge von vor September 2020 haben nach der Migration zu Objektspeichern und dem erneuten Backen fehlerhafte Uploads. Es scheint, dass die Uploads in Ordnung sind, die URLs im Rohformat waren nur falsch formatiert, also behebe ich sie manuell.

# Hinweis: Eine Aktualisierung auf diese Weise scheint keine Revisionshistorie zu Beiträgen hinzuzufügen. Erstellen Sie zur Sicherheit vorher eine manuelle Datenbanksicherung.

# https://rubular.com/
# Erfassungsgruppen: /uploads/..., SHA1-Dateiname
upload_regex = /(\/uploads\/[\/\\w]+\/)([0-9a-f]+)\.\w+/

def to_short_name(sha1)
  # MUSS IM DISCOURSE RAILS CONSOLE AUSGEFÜHRT WERDEN
  Upload.base62_sha1(sha1)
end

# Eine Plausibilitätsprüfung. Sie können alle Beiträge durchgehen und zählen, wie oft /uploads/ vorkommt.
# Führen Sie dann den Regex-Abgleich durch, um zu sehen, ob die Anzahl der Übereinstimmungen damit übereinstimmt.
def count_num_broken_upload_links(posts)
  num_string_match = 0
  num_regex_match = 0

  posts.each do |post|
    num_string_match += post.raw.count("(/uploads/") # DAS IST KAPUTT. COUNT FUNKTIONIERT NUR FÜR ZEICHEN.
    num_regex_match += post.raw.scan(upload_regex).count
  end

  puts "Plausibilitätsprüfung der Anzahl, wie oft alte Upload-Links vorkommen"
  puts "Einfache Zeichenfolgenübereinstimmungen " + num_string_match.to_s
  puts "Regex-Übereinstimmungen " + num_regex_match.to_s
end

def update_post_upload_links(post)
  matches = post.raw.scan(upload_regex)
  fixed_raw = matches.reduce(post.raw) do |accumulator, match|
    prefix = match[0]
    sha1 = match[1]
    # sub, nicht gsub, damit wir jeden Anhang nacheinander ersetzen
    accumulator.sub(prefix, "upload://").sub(sha1, to_short_name(sha1))
  end

  if post.raw != fixed_raw
    # Das Aktualisieren von post.raw scheint auch einen erneuten Back-Vorgang auszulösen. Aber ich möchte trotzdem später einen vollständigen Back-Vorgang durchführen, um sicherzugehen.
    post.update(raw: fixed_raw)
  end

  puts "Aktualisierter Beitrag mit ID #{post.id}"
end

# Das Problem, das ich behebe, tritt bis zum Ende des 5. September 2020 auf, aber ich füge zur Sicherheit ein paar zusätzliche Tage hinzu.
posts = Post.where("created_at < ?", Date.new(2020,9,7))

posts.each { |post| update_post_upload_links(post) }

Und eine andere Person kommentierte

In meinem Szenario muss die Variable upload_regex global und nicht lokal sein. Daher muss upload_regex in $upload_regex geändert werden.