# rails 명령어나 rake task로 Rebake를 실행하면 작동하지 않지만 HTML 재구성은 작동합니다. 왜일까요?

**URL:** https://meta.discourse.org/t/rebake-with-rails-command-or-rake-task-doesnt-work-but-rebuilding-html-does-why/220841
**Category:** Self-hosting
**Created:** [3월 13, 2022, 2:02오후 UTC](https://meta.discourse.org/t/rebake-with-rails-command-or-rake-task-doesnt-work-but-rebuilding-html-does-why/220841 "2022-03-13T14:02:44Z")
**Posts on this page:** 1
**Showing post:** 14

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [3월 25, 2022, 9:35오후 UTC](https://meta.discourse.org/t/rebake-with-rails-command-or-rake-task-doesnt-work-but-rebuilding-html-does-why/220841/14 "2022-03-25T21:35:25Z")

</div>

자, 현재 상황은 이렇습니다:

`[img]` 문자열을 포함하는 40,000개의 게시물 모두에 `post.rebake!(invalidate_broken_images: true)`를 실행해 보았더니 많은 이미지에서는 잘 작동했습니다… 하지만 같은 외부 이미지 호스팅 서비스를 사용했음에도 불구하고 모든 이미지에서 작동하지는 않았습니다.  
예를 들어, 수천 개의 casimages 링크(유효한 이미지로 연결되고 편집 시 컴포저 미리보기에서 이미지가 표시되는 링크)는 제 스크립트 덕분에 서버에 올바르게 업로드되고 게시물의 cooked 버전에서 제대로 표시되었어야 했는데, 실제로는 깨진 상태로 남아 있었습니다. 또한 업로드가 전혀 작동하지 않은 다른 링크도 많이 있고, 그 이유를 알 수 없습니다.

```ruby
Post.where('raw LIKE ?', '%[img]%').find_each do |p|
    p.rebake!(invalidate_broken_images: true)
end

```

다른 이미지 호스팅 서비스에서 가져온 이미지 링크 중에는 업로드가 성공한 것도 있고, 그렇지 않은 것도 있습니다.

이 게시물들과 이미지 링크 사이에 어떤 차이점을 찾지 못했습니다. 모두 유효한 이미지를 가지고 있었고, 동일한 이미지 호스팅 서비스를 사용했다는 점이 제게는 의아했습니다.

여러 번 작업을 시도해 보았지만, 외부 호스팅 서비스와 관계없이 결과가 일관되지 않았습니다… 일부 이미지는 업로드되고 일부는 업로드되지 않았습니다. 마치 무작위인 것처럼 보였습니다.

이는 @Amethi가 겪었던 문제와 조금 비슷합니다: [Some linked images not displaying/show as broken - #8 by Amethi](https://meta.discourse.org/t/some-linked-images-not-displaying-show-as-broken/142177/8?u=canapin) 이 문제에서는 설명 없이 일부 이미지에서만 작동했습니다.

* * *

ℹ 저는 여기서 casimages에 대해서만 이야기할 것입니다. 다만, 제가 가져온 포럼은 다양한 다른 이미지 호스터를 사용했습니다.

그래서 저는 _아마도_ casimages가 제 서버에서 너무 많은 이미지를 가져오려고 하면 제 IP를 일시적으로 블랙리스트에 올린 것일지도 모른다고 생각했습니다. 이는 모든 이미지에서 작동하지 않은 사실과 이미지 업로드 성공의 무작위성을 모두 설명할 수 있습니다.  
심지어 Rebuild HTML 옵션이 처음에는 작동하여 깨진 이미지 아이콘 대신 이미지가 표시된 경우조차 있었습니다(이미지는 여전히 외부 호스팅 서비스에 호스팅된 상태였지만), 외부 이미지 가져오기 Sidekiq 작업이 트리거되면 이미지가 깨졌습니다.  
`rebake!(invalidate_broken_images: true)`를 사용하는 레일 스크립트도 마찬가지였습니다.  
😩

그래서 저는 현재 더 느린 접근 방식을 시도하고 있습니다. 각 레일 `rebake!` 명령 사이에 5초를 기다리는 방식입니다:

```ruby
total = Post.where('lower(raw) LIKE ?', '%[img]https:%').count
i = 0
Post.where('raw LIKE ?', '%[img]https:%').find_each do |p|
    p.rebake!(invalidate_broken_images: true)
    print "#{i}/#{total}"
    print "\r"
    i +=1
    sleep(5)
end

```

약 60시간 후에 더 나아졌는지 확인할 예정입니다…

여기서 제 문제의 근본적인 원인과, (_만약_ casimages에 의해 일시적으로 블랙리스트에 오르지 않았다면) 왜 “정상적인” rebake가 이미지를 서버에 업로드하지 못하는지 이해하고 싶습니다.

참고로 이번에는 casimages 서버의 인증서가 [정상인 것 같습니다](https://meta.discourse.org/t/some-linked-images-not-displaying-show-as-broken/142177/10) 😄

또한 `invalidate_broken_images`가 실제로 무엇을 하는지 이해하지 못하겠습니다. 저는 Discourse 코드에 익숙하지 않습니다.

코드를 살펴보고 `invalidage_broken_images`의 발생 위치를 확인했는데, 다음과 같은 파일들을 발견했습니다:

> <https://github.com/discourse/discourse/blob/b72688340ffdf0d7424e1914644ec93c800812f6/lib/tasks/posts.rake#L630>

왜 특별히 `<img` 문자열을 검색하는 것일까요? 제 게시물은 가져온 phpBB에서 온 것이며, raw 버전에는 `[img]` bbCode만 있고 `<img>` 태그가 없습니다. 그렇다면 제 게시물에 어떻게 영향을 미칠 수 있을까요(그리고 실제로 영향을 미쳤습니다, 이전 메시지를 참고하세요)? 🤔

또한 이 두 메서드 사이의 차이점도 잘 이해하지 못하겠습니다 (?):

> <https://github.com/discourse/discourse/blob/20a954fa0f74b730996a36913588a9a1528c88df/app/models/post.rb#L702>

> <https://github.com/discourse/discourse/blob/20a954fa0f74b730996a36913588a9a1528c88df/app/controllers/posts_controller.rb#L566>

`rebake`는 기본 인수를 false로 설정하고, `rebake!`은 기본 인수를 true로 설정하는 것처럼 보입니다.

이 두 메서드는 어떻게 관련되어 있나요(ruby에서 `!` 문자의 용도는 알고 있습니다) 그리고 왜 다른 파일에 있는 것일까요?

**제 목표는 외부 이미지가 왜 때로는 업로드되고 때로는 업로드되지 않는지 이해하고, 이를 적절하고 자동으로 업로드하는 신뢰할 수 있는 방법을 찾는 것입니다** (시간당 이미지를 하나씩 업로드해야 하더라도). 😅  
거의 2주 동안 이 문제에 매달리고 있으며, 저(그리고 제가 서버를 이전해 준 사람들)를 미치게 만들고 있습니다. 🥴

또한, Discourse 로그에는 아무것도 없고, 대신 여러 개의 `Sidekiq is consuming too much memory (using: 592.25M)` 메시지만 있습니다. 참고로 저는 Windows 10에서 WSL을 통해 Ubuntu로 작업하고 있지만, 작동하는 솔루션을 찾으면(찾을 수 있다면…) VPS에서 사용할 의도가 있습니다.

---

_[View the full topic](https://meta.discourse.org/t/rebake-with-rails-command-or-rake-task-doesnt-work-but-rebuilding-html-does-why/220841)._
