techAPJ
(Arpit Jalan)
7월 11, 2018, 9:15오전
21
This is now done via:
https://github.com/discourse/discourse/commit/536cef86f4d0a3526d33fd3feb54f03bead7fdd4
We no longer carry post ids in memory and the rebake task can be resumed by running posts:rebake_uncooked_posts.
One caveat here is that the resume task will not rebake posts in reverse order (i.e. the sort order will be id ascending).
clay
(Clay Heaton)
7월 17, 2018, 6:33오후
22
techAPJ:
This is now done via:
So @techAPJ , if I need to trigger a rebake of every post on a Discourse install, is @pfaffman ’s method the proper one to use?
techAPJ
(Arpit Jalan)
7월 18, 2018, 2:19오후
23
If you need to rebake all posts instantly then run bundle exec rake posts:rebake.
Post.update_all("baked_version = NULL") will rebake 100 posts (by default) every 15 minutes.
clay
(Clay Heaton)
7월 20, 2018, 12:50오후
24
Thanks, Arpit.
FYI, I encountered some performance issues with that approach, so I went with this, which alleviated the problem and resulted in the same outcome:
Post.in_batches.update_all('baked_version = NULL')
@techAPJ I have a dummy question. Where do you run this command? After entering the app?
It tells me
bash: syntax error near unexpected token ''baked_version = NULL''
techAPJ
(Arpit Jalan)
9월 6, 2018, 8:39오전
27
./launcher enter app
rails c
Post.in_batches.update_all('baked_version = NULL')
대량의 리베이크에 배치 메서드가 적합한가요?
2851000 / 2718220 ( 10.5%)
어제 일반 리베이크 명령으로 프로세스를 시작한 후 현재 상태입니다. 3초마다 약 1,000건씩 처리되는 것 같습니다. 이제 가져오기 작업과 테스트의 막바지에 다가가고 있어, 이보다 느린 방법을 최종적으로 선택하기 전에 대용량 사이트를 리베이크하는 더 적절한 방법이 있는지 확인하고 싶었습니다.
Isambard
(Isambard)
5월 31, 2024, 6:42오전
29
누군가 이 in_batches 버전이 어떻게 작동하는지 설명해 줄 수 있을까요? 아마도 배치 단위로 리베이크를 수행하는 것 같습니다. 하지만 위 게시물들을 보면, 기본적으로 15분마다 100개씩 배치로 리베이크를 한다고 되어 있습니다.
저는 200만 건의 리베이크 작업을 처리해야 하며, 이를 수행하는 최선의 방법을 찾고 있습니다. 이 작업에는 시급성이 없지만, 장시간 실행되는 작업이 정상적인 운영 및 관리 작업(예: 백업)에 영향을 주지 않도록 확인하고 싶습니다.
Isambard
(Isambard)
5월 31, 2024, 6:49오전
30
그리고 방금 이 게시글을 읽었습니다: Rebaked all my posts, but what's it doing now? 이 글에 따르면, re-bake 작업은 실제로 게시글을 다시 구우기(mark for re-baking)만 하는 것 같다고 합니다. (이 마킹은 어떻게 이루어지는 걸까요?) 과정이 너무 느려서, 게시글을 다시 구울 수 있도록 마킹하는 데만 이렇게 오래 걸린다는 사실이 정말 믿기지가 않습니다.
더 빠른 서버로 이전하세요.
사이트가 압도되지 않는 것에 감사해야 합니다. 이 과정의 전체적인 목적은 이 프로세스가 너무 많은 리소스를 차지하지 않도록 하여, 처리 중에 사이트가 반응성을 유지하게 하는 것입니다.
Isambard:
이 표시는 어떻게 이루어지나요?
소스 코드를 참고하는 것은 항상 좋은 아이디어입니다:
def rebake_posts(opts = {})
puts "Rebaking post markdown for '#{RailsMultisite::ConnectionManagement.current_db}'"
begin
disable_system_edit_notifications = SiteSetting.disable_system_edit_notifications
SiteSetting.disable_system_edit_notifications = true
total = Post.count
rebaked = 0
batch = 1000
Post.update_all("baked_version = NULL")
(0..(total - 1).abs).step(batch) do |i|
Post
.order(id: :desc)
.offset(i)
.limit(batch)
.each do |post|
rebake_post(post, opts)
print_status(rebaked += 1, total)
end
Isambard
(Isambard)
5월 31, 2024, 7:28오전
32
실제로 마킹은 매우 빠릅니다. 그리고 rebake_post는 요리를 위한 호출을 수행하는 것 같습니다. 이 과정에서 또는 그 결과로 비동기 작업이 실행되는 것일까요?
네, 물론이죠. 그 작업은 여러 작업을 생성하는 작업이니까요.
Isambard
(Isambard)
5월 31, 2024, 10:10오전
34
Robert:
더 빠른 서버로 마이그레이션하세요.
이상적인 해결책은 아니지만, 다른 방법을 찾았어요!
1000배 더 빠른 자체 재베이킹(Re-baker) 도구를 작성했기 때문에, 한 달이 걸리던 작업이 이제 단 몇 분 만에 끝납니다.
실제로는 데이터베이스 삽입 직전에 재베이킹을 수행하도록 할 계획이라, 재베이킹에 소요되는 시간이 데이터베이스 삽입 시간 내에 흡수되어 사실상 비용이 사라질 것입니다.
아, 네. 맥락을 몰랐네요.
네, 이 내용은 Production(프로덕션) 환경을 위해 작성된 것입니다.
궁금해서 여쭤보는데, 어떤 작업을 하셨는지 공유해 주실 수 있나요?
Isambard
(Isambard)
7월 10, 2024, 11:56오후
37
가져온 모든 게시물을 스캔하여 어떤 마크업/이모티콘이 포함되어 있는지 확인하는 프로그램을 작성했습니다. 그런 다음, 원본 게시물을 HTML로 변환하고 데이터베이스를 직접 업데이트하는 또 다른 프로그램을 작성했습니다.