古いトピックのタイトルを変更しようとしました。すると、トピック内のすべての画像が transparent.png として表示され、正しく表示されなくなっていることに気づきました。
rake uploads:recover の後、rake posts:rebake を実行しても問題は解決しませんでした。
画像には https://talk.zabanshenas.com/uploads/default/original/3X/8/7/8726fbef7b69ac8226d28568b46f3e06afe2fb4f.jpeg でアクセスできます。
アップロード自体は次の通りです:
しかし、以下を実行すると:
Upload.where( "url LIKE '%8726fbef7b69ac8226d28568b46f3e06afe2fb4f%'" )
次の結果が返ってきます:
=> []
何かご存知ですか?
同じ画像を別の場所に再度アップロードすると、リベイク後に古い投稿にもその画像が表示されてしまいます。これは、過去のアップロードファイルの一部がインデックス処理されていることが原因ではないかと考えています。アップロードされたすべてのファイルを再度インデックスするにはどうすればよいでしょうか?あるいは、より理想的には、不足しているファイルのみをインデックスする方法があれば教えてください。
更新情報:
いくつかの Rake タスクを確認したところ、rake posts:recover_uploads_from_index というタスクがあり、これが私の問題を解決するようです。ただし、以下のエラーが発生しています:
undefined method `split' for nil:NilClass
from /var/www/discourse/app/models/site_setting.rb:151:in `s3_base_url'
私のウェブサイトでは S3 アップロードは有効になっていません
![]()
更新:
上記のエラーに対して一時的な簡易的な修正(この行をコメントアウト)を行い、rake タスクを実行しました。しかし、想定していた結果とは異なりました:
Searching for upload://dC9HyffX3S1XbwwdUOsHe5aMyJX.jpeg (dC9HyffX3S1XbwwdUOsHe5aMyJX) in index
Skipping upload://dC9HyffX3S1XbwwdUOsHe5aMyJX.jpeg in https://talk.zabanshenas.com/t/topic/4430/1 cause it appears to have a short file name
Searching for upload://kWx14u8XkQ8qd6NvOoDLN6usTl8.jpeg (kWx14u8XkQ8qd6NvOoDLN6usTl8) in index
Skipping upload://kWx14u8XkQ8qd6NvOoDLN6usTl8.jpeg in https://talk.zabanshenas.com/t/topic/4430/1 cause it appears to have a short file name
rake タスク rake uploads:recover をさらに詳しく調べました。以下の行に問題があるのではないかと思っています:
私の理解では、uploads/default/original 内のすべてのファイルが @paths に追加されるはずです。しかし、@paths をファイルに出力して確認したところ、トムストーンファイルのみがリストされていることがわかりました。
何か見落としているのでしょうか?
@cvx
以下のようにすべきではないでしょうか。
concat(Dir.glob(File.join(
Rails.root, "public", Discourse.store.upload_path,
'original',
'**',
'*.*'
)))
