サムネイル生成とマークダウンレンダリングの問題

こんにちは、

Discourse の最新バージョン 2.5.0 以降、サムネイルの生成に問題が発生しています。
どうやらサムネイルの生成がコア機能から行われるようになり、その結果、すべてのサムネイルが削除されてしまったようです。
復元するために様々な操作を試みましたが、以下の状況では機能しないことを説明します。

: この変更にはおそらく正当な理由があるとは思いますが、機能の破壊となる突然の動作変更を導入する際、アップグレードガイドやこの変更へのオプトイン手段を用意せずに行うのは避けてほしいです。:confounded:

環境

  • Discourse 2.5.0 beta4 (faeb5793ba)
  • Topic List Preview プラグイン 4.4.0
  • WP-Discourse: Discourse のトピック(最初の投稿)に HTML 全体をそのまま公開。

投稿内容の例(フォーマット済み):

Content

利便性のため、画像の HTML コード:

<img
        width="150"
        height="84"
        src="https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-150x84.jpg"
        class="attachment-thumbnail size-thumbnail"
        alt=""
        srcset="
            https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-150x84.jpg     150w,
            https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-300x169.jpg    300w,
            https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-1200x675.jpg  1200w,
            https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-1536x864.jpg  1536w,
            https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-2048x1152.jpg 2048w,
            https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-788x443.jpg    788w,
            https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית.jpg           1280w
        "
        sizes="(max-width: 150px) 100vw, 150px"
    />
<div data-wp>
    <a
        href="https://www.banggood.com/Xiaomi-Redmi-Router-AC2100-2033Mbps-2_4G-5G-Dual-Band-Wireless-Router-6High-Gain-Antennas-128MB-OpenWRT-WiFi-Router-p-1614038.html"
        target="_blank"
        ><img src="https://zuzu.deals/wp-content/uploads/2020/01/5e3128b4e5da7-150x150.jpg"/>
    </a>
    <div>
        <div data-buy>
            <a
                href="https://www.banggood.com/Xiaomi-Redmi-Router-AC2100-2033Mbps-2_4G-5G-Dual-Band-Wireless-Router-6High-Gain-Antennas-128MB-OpenWRT-WiFi-Router-p-1614038.html"
                target="_blank">קנייה
            </a>
            <span data-clipboard-text="BG38b2ac" data-coupon>BG38b2ac</span><i></i>
        </div>
        <div data-price>$43.99</div>
    </div>
</div>
<hr />
<p>
    <small>
        &nbsp;פורסם ב:&nbsp;<a href="https://zuzu.deals/%d7%a7%d7%95%d7%a4%d7%95%d7%9f-%d7%91%d7%9c%d7%a2%d7%93%d7%99-%d7%a8%d7%90%d7%95%d7%98%d7%a8-%d7%97%d7%96%d7%a7-%d7%95%d7%97%d7%93%d7%a9-%d7%a9%d7%9c-%d7%a9%d7%99%d7%90%d7%95%d7%9e%d7%99-xiaomi-re-2/"></a>
    </small>
</p>
<br />
<p>נעים להכיר!</p>

Discourse アップデート前

TLP は、トピックの作成時でも編集時でも、外部画像に対して常に正常に動作していました。
ただし、マークダウンの問題により、「リモート画像をローカルにダウンロード」オプションは無効にしていました。

マークダウンのレンダリング問題

これは主要な問題ではありませんが、Discourse アップグレード後も発生しています。以下に説明します。
Discourse が画像の HTML をマークダウン構文に置き換えてダウンロードする場合、私たちの環境では以下のようになります:

[...]<a href="<link_here>" target="_blank">![|150x150](upload://l0iarnA6SPVAyJN5l7pnQxZnPvE.jpeg)</a>[...]

この場合、Discourse は画像をレンダリングできません。

Image

image

この問題を修正するには、少なくとも上記に空行が必要です:

[...]<a href="<link_here>" target="_blank">

![|150x150](upload://l0iarnA6SPVAyJN5l7pnQxZnPvE.jpeg)</a>[...]
Image

HTML に囲まれたマークダウン画像のレンダリングを許可することは可能でしょうか?

Discourse アップデート後

  • すべてのサムネイルが削除されました。
  • トピックの内容内ではすべての画像が正常に表示されています。
  • この機能のため (https://github.com/discourse/discourse/commit/03818e642a1ae871bffdc0c39c10f05f0b8b0398、と思います)、外部リンクからのサムネイル取得が不可能になったため、「リモート画像をローカルにダウンロード」オプションを有効にせざるを得なくなりました… :pensive:
  • 「リモート画像の最大日数」は最大値の 10000 に設定されています。
Settings

これにより、画像をダウンロードするためにすべての投稿をリベイク(再構築)するように指示されました。そしてここから奇妙なことが始まります。

  1. rake posts:rebake はあまり効果がありませんでした(少なくともトピックの最初の投稿には効果がありましたが、多くの PullHotlinkedImages がトリガーされました)。
    1.1. いくつかのトピックを確認したところ、classsrcset 属性を持つ画像 HTML が原因ではないかと考え、以下のコードで画像を正規化しようと試みました(Ruby は知りません)-- 一部のトピックでは効果がありました
    1.2. ただし、マークダウンの問題により、改行を追加して修正する必要がありました – 少なくともこれらのトピックではサムネイルが機能しました
Code
Post.where(post_number: 1)
    .where("raw LIKE '%<img%/>%'")
    .each 
        do |post|
            post.raw.gsub!(/<img[^>]+(src="[^"]+")[^>]+\/>/, "<img \\1 /")
            post.save!(validate: true)
            post.rebake!  
        end

Post
  .where(post_number: 1)
  .where("raw LIKE '%upload://%'").each 
     do |post|  
       post.raw.gsub!(/(!\[.*upload:\/\/.*\))/, "\n\n\\1") 
       post.save!(validate: false); 
       post.rebake! 
     end
  1. 無視されたトピックを手動で編集(内容を変更せず保存のみ)すると、ほとんどの場合機能します。画像がダウンロードされます。
    2.1. 編集後でも無視されたままのトピックがあります。PullHotlinkedImages がトリガーされているのが確認できますが、画像はダウンロードされません(例: この HTML <img src="https://zuzu.reviews/wp-content/uploads/2020/05/HiZERO-VS-BISSEL-VS-שואב-אלחוטי-VS-שואב-רובוטי-VS-מגב-ודלי-VS-מטאטא-VS-ספונגה-חשמלית-150x84.jpg" />リンク)。
  2. 正規化後、編集で画像がダウンロードされることを確認し、rake posts:rebake を複数回試行しましたが – 効果はありませんでした
  3. 次に、rails コンソールを使用して上記のコードと似ていますが、特定のトピック ID を指定し、post.rebake! のみを実行しました – 効果はありませんでした
  4. トピック内のすべての画像が常にダウンロードされるわけではありません。
  5. @Canapin さんから Download remote images from older posts? - #3 by vinothkannans を指摘されました;現在すべての投稿をリベイクしようとしています。-- 残念ながら効果はありませんでした

なぜ一部の画像は機能し、他の画像は機能しないのか、単に狂っています。基準の問題だとは思いません。画像の設定は十分に高いです。背後にあるロジックが全く理解できません。ランダムに見えるだけです。

現在、まだ多くのサムネイルが欠落しています。おそらく大部分は編集/保存で手動で修正できるかもしれませんが、それは現実的ではありません。私はクライアントのためにこれをやっており、すでに問題の修正に多くの時間を費やしてしまいました。

サムネイルとしてアップロードされた画像でも構いませんが:

  • 画像がダウンロードされない具体的な理由があれば教えてください。役立つ設定はありますか?何か必要なものはありますか?デバッグ方法は?
  • コンソールを通じて編集/保存と同様に、ダウンロードを強制する方法はありますか?
  • HTML に囲まれた場合でもマークダウン画像のレンダリングを許可できますか?

問題の説明が十分に正確であることを願っています。

お手数ですが、あらゆる助けと解決策を事前に感謝します。

「いいね!」 2

@Arkshine さん、問題が発生しているとのこと、お察しします。残念ながら、特に当社のプラグイン API の範囲を超えてコアの動作を上書きするようなサードパーティ製プラグインとの互換性をすべて保証することはできません。今後は TLP が使用するコアの上書きを減らすことができるようになり、安定性が向上することを願っています。

なお、現在は当社の 公式ソリューション を用いてサムネイルを表示できるようになりました。これは完全に当社のサポートするプラグイン API を使用して実装されています。

コアのサムネイルがローカル画像のみに機能するのはご指摘の通りです。根本的には TLP も画像を取得してローカルに保存していました。そのため、現在の違いは、pull_hot_hotlinked_images ジョブを使用してすべてを一貫した方法で行っている点です。

ここには解決すべきいくつかの問題があるようです。見落としがないよう、それらを分けて検討するのがベストだと考えます。あなたの投稿を読み進めると、以下の 2 つの問題が見受けられます。

リモート画像の取得が不正な HTML/マークダウンを生むことはあるべきではありませんので、これを修正できるよう努めます。bug トピックを新規作成し、私をメンションしていただければ、調査いたします。

同様に、特殊文字がここで画像を破綻させるべきではありません。別の bug トピックを開いていただければ、確認いたします。

「いいね!」 4

返信ありがとうございます、@david さん。

Markdown について、特殊文字を含むリンクで対応できます。ありがとうございます。


しかし、結局のところ、私の主な問題は、Discourse に画像の強制ダウンロードを行わせることです。Markdown の問題はコンソールで解決できますし、すべてのリンクに特殊文字があるわけではありません。まだサムネイルのないトピックがたくさんあります。私が助けを求めているのはこの点です

例えば、このリンクには特殊文字が含まれていません。Save Edit をクリックしない限り、コンソールからの rebaking でも Rebuild HTML リンクを使用しても、画像はダウンロードされません。

Save Edit を行ったときと同じように、Discourse に画像をダウンロードさせるための Rails コマンドや他の方法はありませんか?


実際、コンポーネントを使ってみましたが、うまくいきませんでした。ただし、サムネイルの問題が解決し次第、再度試してみます。

アフィリエイトサイトですか?

それは奇妙ですね。一つ思い当たるのですが、これらの投稿はシステムユーザーによって作成されたものですか?それともDiscobotでしょうか?

それらのほとんどは通常の管理者ユーザーです。これらのトピックは、WP Discourse の API を通じて作成されます。

例えば、これです:

@Arkshine、そこにリンクがあったはずでしたか?

すみません、テスト中に例を処理している最中に、うっかりボタンを押してしまいました。

その上で、これが役立つかどうか確認するために以下の処理を実行し始めました(目が痛くなるかもしれませんが、ご容赦ください!)

Post
  .joins(:topic)
  .where(post_number: 1)
  .where('topics.visible = true')
  .where('topics.deleted_at IS NULL')
  .each do |post| 
     post.baked_version = nil
     post.save!(validate: false)
     post.rebake!
   end

少し時間がかかりました。Jobs::PullHotlinkedImages がかなり多く実行されているのを目にしました。
しかし、あまり効果がなかったようです。

特定のトピックを確認すると、例えばこの トピック です。

コンソールから確認すると、Jobs::ProcessPost はトリガーされますが、Jobs::PullHotlinkedImages はトリガーされません。

[106] pry(main)> Post.update_all(baked_version: nil)
=> 38808

[107] pry(main)> Post.where(post_number: 1, topic_id: 64215).each do |post| post.rebake!; end
=> [#<Post:0x0000557fe01f2fd8
  id: 79717,
  user_id: 3,
  topic_id: 64215,
  post_number: 1,
  raw:
   "<div data-wp><a href=\"https://www.mooki.co.il/gaming/hbilvt-giiming-mwtlmvt/mvwb-giiming-khvl-sparkfox-wvlhn-giiming-mqcvei-lumi-whvr-2\" target=\"_blank\"><img src=\"https://zuzu.deals/wp-content/uploads/2020/05/5ebcf97155cd2-150x150.png\" /></a><div><div data-buy><a href=\"https://www.mooki.co.il/gaming/hbilvt-giiming-mwtlmvt/mvwb-giiming-khvl-sparkfox-wvlhn-giiming-mqcvei-lumi-whvr-2\" target=\"_blank\">קנייה</a><span data-clipboard-text=\"GLA679\" data-coupon>GLA679</span><i></i></div><div data-price>₪679 <span data-old-price>₪1378</span></div></div></div><hr /><p><small>&nbsp;פורסם ב:&nbsp;<a href=\"https://zuzu.deals/%d7%91%d7%9c%d7%a2%d7%93%d7%99-%d7%95%d7%91%d7%9e%d7%97%d7%99%d7%a8-%d7%97%d7%98%d7%99%d7%a4%d7%94-%d7%9e%d7%95%d7%a9%d7%91-%d7%92%d7%99%d7%99%d7%9e%d7%99%d7%a0%d7%92-%d7%90%d7%93%d7%95%d7%9d-spark/\"></a></small></p><br><p><img src=\"https://www.mooki.co.il/pub/media/catalog/product/cache/0f831c1845fc143d00d6d1ebc49f446a/_/s/_sparkfox_k1_5_.png\" /></p>\n<p style=\"text-align: center;\">בין אם אתם גיימרים ובין אם אתם פשוט עובדים ויושבים כל היום והגב כבר זועק לכיסא טוב יותר, הנה לכם עוד מבצע בלעדי במחיר חטיפה!<br />\nכיסא גיימינג מפנק, אוזניות גיימינג ומשלוח מהיר בחינם, עם אחריות יבואן רשמי &#8211; רק ב679₪!!!</p>\n<p style=\"text-align: center;\">השתמשו בקופה בקופון הבלעדי &#8211; <strong>GLA679</strong></p>\n<div> <img src=\"https://zuzu.deals/wp-content/uploads/2020/05/90902-801-09_2_1.jpg\" /></div>\n<div>\n<h3 style=\"text-align: center;\">מושב גיימינג מקצועי SPARKFOX GC60P</h3>\n</div>\n<div>מושב גיימינג בעל עיצוב מיוחד למשחקי מחשב לנוחות מקסימאלית למשתמש</div>\n<div>\n<ul>\n<li>מושב בעל משענת גב גבוהה</li>\n<li>נוחות המקסימאלית למשך זמן משחק ארוך</li>\n<li>זוג כריות לתמיכה בצוואר ובגב התחתון</li>\n<li>סוג חומר: ספוג יצוק</li>\n<li>סוג מסגרת: מתכת</li>\n<li>חומר: עור עם סיבי פחם</li>\n<li>משענות ידיים: מתכווננות מעלה / מטה</li>\n<li>סוג מנגנון: פרפר</li>\n<li>סוג הרמה: הידראולית Class4</li>\n<li>טווח משענת גב: 90°-180°</li>\n<li>סוג בסיס: ניילון</li>\n<li>חומר גלגל: ניילון</li>\n<li>יכולת נשיאה: עד 150 ק"ג</li>\n<li>אחריות: שנה</li>\n</ul>\n<div><strong>מידות</strong></div>\n<div>\n<ul>\n<li>רוחב: 67 ס"מ</li>\n<li>עומק: 67 ס"מ</li>\n<li>גובה משתנה: 124-132 ס"מ</li>\n</ul>\n<h3></h3>\n<p><img src=\"https://zuzu.deals/wp-content/uploads/2020/05/90902-802-08_3_1.jpg\" /></p>\n<h3 style=\"text-align: center;\">אוזניות גיימינג SPARKFOX K1</h3>\n<div>אוזניות גיימינג בעיצוב מיוחד לנוחות מקסימלית לשמע ודיבור וביטול רעשי רקע</div>\n<div>\n<ul>\n<li>ניתנות לשימוש ברוב הקונסולות הקיימות בשוק</li>\n<li>שמע וניהול שיחות בטלפונים ובמחשבים ניידים</li>\n<li>ווסת עוצמת השמע הינו בכבל של האוזנייה- לגישה נוחה</li>\n<li>שמע מעולה ממנהלי התקנים גדולים של 50 מ"מ</li>\n<li>בקרי עוצמת הקול וההשתקה</li>\n<li>כוסות אוזניים מרופדות גדולות לנוחות מרבית</li>\n<li>קשת האוזנייה מתכווננת להתאמה מושלמת לראשכם</li>\n<li>מתחבר ישירות ליציאת בקרי 3.5 מ"מ</li>\n</ul>\n</div>\n<div>מצורף מתאם מיוחד לחיבור האוזניות למחשב נייח ע"י מפצל 3.5 מ"מ ל 2 יציאות 3.5 מ"מ</div>\n</div>\n</div>\n<p>&nbsp;</p>\n<div data-custom-html=\"\"></div>",
  cooked:
   "<div data-wp=\"\">\n<a href=\"https://www.mooki.co.il/gaming/hbilvt-giiming-mwtlmvt/mvwb-giiming-khvl-sparkfox-wvlhn-giiming-mqcvei-lumi-whvr-2\" target=\"_blank\"><img src=\"https://zuzu.deals/wp-content/uploads/2020/05/5ebcf97155cd2-150x150.png\"></a><div>\n<div data-buy=\"\">\n<a href=\"https://www.mooki.co.il/gaming/hbilvt-giiming-mwtlmvt/mvwb-giiming-khvl-sparkfox-wvlhn-giiming-mqcvei-lumi-whvr-2\" target=\"_blank\">קנייה</a><span data-clipboard-text=\"GLA679\" data-coupon=\"\">GLA679</span><i></i>\n</div>\n<div data-price=\"\">₪679 <span data-old-price=\"\">₪1378</span>\n</div>\n</div>\n</div><hr><p><small> פורסם ב: <a href=\"https://zuzu.deals/%d7%91%d7%9c%d7%a2%d7%93%d7%99-%d7%95%d7%91%d7%9e%d7%97%d7%99%d7%a8-%d7%97%d7%98%d7%99%d7%a4%d7%94-%d7%9e%d7%95%d7%a9%d7%91-%d7%92%d7%99%d7%99%d7%9e%d7%99%d7%a0%d7%92-%d7%90%d7%93%d7%95%d7%9d-spark/\"></a></small></p><br><p><img src=\"https://www.mooki.co.il/pub/media/catalog/product/cache/0f831c1845fc143d00d6d1ebc49f446a/_/s/_sparkfox_k1_5_.png\"></p>\n<p>בין אם אתם גיימרים ובין אם אתם פשוט עובדים ויושבים כל היום והגב כבר זועק לכיסא טוב יותר, הנה לכם עוד מבצע בלעדי במחיר חטיפה!<br>\nכיסא גיימינג מפנק, אוזניות גיימינג ומשלוח מהיר בחינם, עם אחריות יבואן רשמי – רק ב679₪!!!</p>\n<p>השתמשו בקופה בקופון הבלעדי – <strong>GLA679</strong></p>\n<div> <img src=\"https://zuzu.deals/wp-content/uploads/2020/05/90902-801-09_2_1.jpg\">\n</div>\n<div>\n<h3>מושב גיימינג מקצועי SPARKFOX GC60P</h3>\n</div>\n<div>מושב גיימינג בעל עיצוב מיוחד למשחקי מחשב לנוחות מקסימאלית למשתמש</div>\n<div>\n<ul>\n<li>מושב בעל משענת גב גבוהה</li>\n<li>נוחות המקסימאלית למשך זמן משחק ארוך</li>\n<li>זוג כריות לתמיכה בצוואר ובגב התחתון</li>\n<li>סוג חומר: ספוג יצוק</li>\n<li>סוג מסגרת: מתכת</li>\n<li>חומר: עור עם סיבי פחם</li>\n<li>משענות ידיים: מתכווננות מעלה / מטה</li>\n<li>סוג מנגנון: פרפר</li>\n<li>סוג הרמה: הידראולית Class4</li>\n<li>טווח משענת גב: 90°-180°</li>\n<li>סוג בסיס: ניילון</li>\n<li>חומר גלגל: ניילון</li>\n<li>יכולת נשיאה: עד 150 ק"ג</li>\n<li>אחריות: שנה</li>\n</ul>\n<div><strong>מידות</strong></div>\n<div>\n<ul>\n<li>רוחב: 67 ס\"מ</li>\n<li>עומק: 67 ס\"מ</li>\n<li>גובה משתנה: 124-132 ס\"מ</li>\n</ul>\n<h3></h3>\n<p><img src=\"https://zuzu.deals/wp-content/uploads/2020/05/90902-802-08_3_1.jpg\"></p>\n<h3>אוזניות גיימינג SPARKFOX K1</h3>\n<div>אוזניות גיימינג בעיצוב מיוחד לנוחות מקסימלית לשמע ודיבור וביטול רעשי רקע</div>\n<div>\n<ul>\n<li>ניתנות לשימוש ברוב הקונסולות הקיימות בשוק</li>\n<li>שמע וניהול שיחות בטלפונים ובמחשבים ניידים</li>\n<li>ווסת עוצמת השמע הינו בכבל של האוזנייה- לגישה נוחה</li>\n<li>שמע מעולה ממנהלי התקנים גדולים של 50 מ\"מ</li>\n<li>בקרי עוצמת הקול וההשתקה</li>\n<li>כוסות אוזניים מרופדות גדולות לנוחות מרבית</li>\n<li>קשת האוזנייה מתכווננת להתאמה מושלמת לראשכם</li>\n<li>מתחבר ישירות ליציאת בקרי 3.5 מ\"מ</li>\n</ul>\n</div>\n<div>מצורף מתאם מיוחד לחיבור האוזניות למחשב נייח ע\"י מפצל 3.5 מ\"מ ל 2 יציאות 3.5 מ\"מ</div>\n</div>\n</div>\n<p> </p>\n<div data-custom-html=\"\"></div>",
  created_at: Thu, 14 May 2020 07:55:31 UTC +00:00,
  updated_at: Tue, 26 May 2020 14:56:16 UTC +00:00,
  reply_to_post_number: nil,
  reply_count: 0,
  quote_count: 0,
  deleted_at: nil,
  off_topic_count: 0,
  like_count: 0,
  incoming_link_count: 2,
  bookmark_count: 0,
  score: 10.8,
  reads: 4,
  post_type: 1,
  sort_order: 1,
  last_editor_id: -1,
  hidden: false,
  hidden_reason_id: nil,
  notify_moderators_count: 0,
  spam_count: 0,
  illegal_count: 0,
  inappropriate_count: 0,
  last_version_at: Thu, 14 May 2020 09:19:26 UTC +00:00,
  user_deleted: false,
  reply_to_user_id: nil,
  percent_rank: 0.0,
  notify_user_count: 0,
  like_score: 0,
  deleted_by_id: nil,
  edit_reason: nil,
  word_count: 939,
  version: 3,
  cook_method: 1,
  wiki: false,
  baked_at: Tue, 26 May 2020 16:59:49 UTC +00:00,
  baked_version: 2,
  hidden_at: nil,
  self_edits: 2,
  reply_quoted: false,
  via_email: false,
  raw_email: nil,
  public_version: 3,
  action_code: nil,
  image_url: "https://zuzu.deals/wp-content/uploads/2020/05/5ebcf97155cd2-150x150.png",
  locked_by_id: nil,
  image_upload_id: nil>]

コンパイラから「編集を保存」すると、

image

画像が正常にダウンロードされているのが確認できます。

なるほど、問題の核心はここにあります。

これは、ホットリンクされた画像のプルをスケジュールする前に以下のロジックが存在するためです。

このロジックは、pull_hotlinked_image ジョブが無限ループでスケジュールされるのを防ぐために設計されています。しかし、もしかしたらこのロジックの改善が必要かもしれません。これらの投稿のいずれかのリビジョン履歴を確認し、なぜシステムによって最終編集されたのかを確認していただけませんか?

「いいね!」 2

このトピックについて:

  1. image
  2. image(カテゴリ変更)
  3. image(私は「保存と編集」のみを実行)
  4. image(システムが画像をマークダウンに置換)

つまり、これはカテゴリ変更が原因でしょうか?

「いいね!」 1

はい、それなら説明がつきますね!一時的な解決策として、以下のようにしてプル・ホットリンク画像ジョブを手動で実行できます:

Jobs.enqueue_in(10, :pull_hotlinked_images, post_id: post.id)

ただし、より良い解決策が必要です。それを私のタスクリストに追加しておきます。

「いいね!」 5

素晴らしい!試してみます!

編集:

コマンドが非常に役立ったことを確認しました。これで、ほとんどの画像が戻ってきました。改めてありがとうございます!

まだ未処理のケースがいくつか残っています。特殊文字を含む画像や、画像が破損しているとマークされているが実際には問題ないトピックなどです(HTML の再構築で修正し、その後「編集を保存」してダウンロードすることで解決します)。もし #9890 がマージされ、Markdown に関する修正が行われれば、おそらくすべてが解決するでしょう。

「いいね!」 2

システムユーザーの編集に関するこの修正をマージしました:

他の問題はすべて別トピックに分割したと思いますが、見落としがあれば @Arkshine さん、ぜひ新しいトピックを開いてください。

「いいね!」 3

余談ですが、この設定を削除しました。ホットリンクされた画像を取得する際に、投稿の年齢を確認しなくなりました

cc @merefield

「いいね!」 6

このトピックは 28 時間後に自動的に閉鎖されました。新しい返信は受け付けていません。