Youtube embeds missing

I have a client for whom embedded youtube videos are missing. They appear in composer’s preview, but when the messages are saved, they disappear. They are working fine in try.discourse.org. I tried whitelisting youtu.be and changing the URL to a youtube.com url too. Neither solved the problem.

The site is running v1.6.0.beta11 +141

Have you tried reaching YouTube from your client’s server?

It seems that the problem was that recent Discourse updates have caused my DOI resolver plugin to muck things up. (I disabled a couple other things too, but it was definitely some plugin. . . )

포스트를 다시 베이킹할 때 youtube.com에서 429 Too Many Requests 오류가 발생하는 문제가 있는 분이 계신가요?

[1] pry(main)> posts = Post.where("raw like '%youtube%'").count
=> 5237

:thinking:

저도 같은 문제를 겪었습니다. 일시적인 IP 차단(1시간인 것 같습니다)이며, 해당 시간 동안 재구축된 게시물의 모든 YouTube 원박스가 실패합니다.

재구축 시 YouTube에 대한 시간당 요청 횟수가 x를 초과하지 않도록 방지하는 메커니즘을 구현해야 하지 않을까요?

최근 Discourse 설치에 대해 일련의 변경 사항과 업그레이드를 진행한 후, 두 가지 문제가 남아 있습니다. 하나는 데이터 컨테이너를 다시 빌드할 수 없는 것이며, 이 부분은 해결 방법을 찾고 있습니다. 다른 하나는 YouTube URL을 제외한 모든 원박스가 정상 작동하는 것입니다.

서버와 컨테이너 내부에서 YouTube로 CURL 요청을 보낼 수 있는데, 이것이 일시적인 IP 차단 때문임을 어떻게 확인할 수 있을까요?

수정: 재빌드(App)나 리베이킹(Rebake)이 이 문제에 영향을 주지 않는다는 것을 확인했습니다.

수정 2: 검색을 통해 @jomaxro 님이 여기에서 CloudFlare와 같은 서비스가 원박스에 영향을 줄 수 있다고 언급한 것을 보았습니다… CDN이 원박스 중 하나에만 영향을 줄 수 있을까요? 개발 모드(Development Mode)로 전환해 보았지만 변화가 없었습니다.

수정 3: 모든 플러그인을 제거해 보았습니다. 변화가 없었습니다. (또한, 프로세스들이 서로를 차단하는 것 같아 리베이킹도 수행할 수 없습니다.)

수정 4: @Overgrow 님의 명령어를 시도해 보았고, 네, 확실히 문제가 있습니다.

[1] pry(main)> posts = Post.where("raw like '%youtube%'").count
=> 72674

리베이킹 명령어를 실행하려고 애쓰고 있는데, 컨테이너가 다음 오류를 반환하고 있습니다:

PG::UnableToSend: no connection to the server

PG::ConnectionBad: PQconsumeInput() SSL SYSCALL error: EOF detected

무언가를 중지해야 하나요?

한 가지 접근 방식은 패턴 매칭을 사용하여 단순히 다시 구운 후 지연 시간을 설정하는 것입니다.

이런 식으로:

rake posts:rebake_match["%youtube%",regex,10]

?

제 주요 문제는 이 명령어를 실행할 수 없다는 겁니다 :sweat:

이것으로 점진적으로 재번역(rebake)할 수 있을지도 모릅니다: Post.where("raw like '%youtube%'").where("cooked NOT LIKE '%lazyYT%'").update_all(baked_version: nil)

우선 @riking 님, 시간을 내어 도와주셔서 정말 감사합니다.

해당 명령어를 실행해 보았는데, 누락된 게시글 수라고 추정되는 22462라는 숫자가 출력되었습니다. 명령어의 마지막 부분을 기준으로 볼 때, 백그라운드에서 실행되고 있다고 가정해도 될까요?

네, 15분마다 실행되는 작업이 있어서 SiteSetting.rebake_old_posts_count에 해당하는 게시물을 다시 처리합니다.

한 가지 질문이 있는데, 시간이 아무리 지나도 숫자가 줄어들지 않습니다. 해당 작업을 추적하거나 강제로 실행하는 방법이 있을까요?

음, 내가 실수를 한 것일 수도 있겠다 :thinking: 이 쿼리의 결과는 뭐야? Post.where("raw like '%youtube%'").where("cooked LIKE '%lazyYT%'").count

현재 상태:

기존 명령어:

[2] pry(main)> Post.where("raw like '%youtube%'").where("cooked NOT LIKE '%lazyYT%'").update_all(baked_version: nil)
=> 23257

새로운 명령어:

[1] pry(main)> Post.where("raw like '%youtube%'").where("cooked LIKE '%lazyYT%'").count
=> 49458

수정: 시간이 좀 지나 확인해 본 결과, 두 번째 값은 일정하게 유지되는(같은 값) 반면, 첫 번째 값은 계속 증가하고 있습니다.

게시글의 문자열을 일치시키는 데 정규식(regex)은 필수적이지 않습니다. 간단한 문자열 검색으로 youtube(예를 들어)를 충분히 잘 일치시킬 수 있습니다. 이 예시에서는 youtube라는 문자열이 포함된 모든 게시글이 재구축(rebake)되며, 100초마다 하나씩 처리됩니다(매우 느립니다…)

Screen Shot 2020-05-26 at 11.23.06 AM

약 100초가 지났습니다:

Screen Shot 2020-05-26 at 11.25.35 AM

이 작업을 계속 실행해 보겠습니다. 76,200초(±) 정도 후에 이 rake 작업이 완료될 것 같습니다 :slight_smile:

이 예시를 10초 지연으로 설정했어야 했네요 :slight_smile:

감사합니다 @neounix

시해 보았지만, 안타깝게도 성공하지 못했습니다.

네트워크와 관련된 문제가 있는 건 아닌지 의심이 시작됩니다.

@iceman 님, 죄송합니다.

조금 기술적인 성격이 강한 사람이라 "성공하지 못했습니다"라는 표현이 정확히 어떤 의미인지 이해가 안 됩니다 :slight_smile: (기술 정보가 부족해서요)

rake 명령을 실행했을 때 rails 오류가 발생했다는 말씀이신가요?

그렇다면 rails 오류 전체를 게시해 주시겠습니까?

아니면, rails 태스크가 정상적으로 실행되었나요? 그렇다면 rake 태스크에 따라 몇 개의 게시물이 다시 처리(rebake)되었나요?

감사합니다.

예를 들어, 제 작은 샘플 재처리 태스크(매우 느리며 100초 지연)가 이 토픽을 위해 몇 시간째 실행 중입니다:

Screen Shot 2020-05-26 at 5.09.07 PM

현재 전체 762개 중 209개까지 진행되었습니다…

님의 재처리 태스크 진행 상황은 어떻게 되나요?

부족한 정보로 혼란을 드려 죄송합니다!

제가 말한 것은 작은 샘플로 실행한 후 다시 실행해 보았지만 숫자가 변하지 않았다는 뜻입니다.

즉, 명령어를 실행했을 때 게시글이 76,000개였는데, 200개를 처리(bake)한 후 멈추고 다시 실행하니 새로운 숫자가 76,200개였다는 겁니다. (네, 아마도 사용자 400명이 YouTube 링크가 포함된 게시글을 추가했을 수도 있겠지만… 저도 모르겠네요.)

지금은 어떻게 될지 보기 위해 다시 실행 중이지만 며칠은 걸릴 것 같습니다 :stuck_out_tongue: (76,500회 실행…)

다른 분들은 이런 문제가 없는 것 같으니 제 변수들을 생각해 보고 있는데, 기본적으로 다음과 같습니다:

  • 기기를 변경했습니다. (그래서 YouTube의 속도 제한(rate limiting) 때문일 수도 있나요?)
  • 새 설치 환경에 Discourse 백업을 복원했습니다. (이건 관련이 없어야 하지만, 이 시점에서는 움직이는 모든 것에 베팅하는 중입니다.)
  • 두 개의 컨테이너를 설치했습니다. (데이터 재구성 관련 문제가 있었던 것 같았지만 @Falco 님의 이 정보 덕분에 이제 그것이 “정상” 상태라는 것을 알게 되었습니다.)
  • 여기 있는 CDN 튜토리얼을 따라 CloudFlare를 상단에 설정했습니다.

두꺼운 머리통 때문에 죄송합니다 :slight_smile: 이 rake 태스크를 실행하고 있다는 뜻인가요?

rake posts:rebake_match['youtube',string,10]

타입하는 내용과 보이는 내용을 정확히 게시하는 것이 중요합니다.

정확한 rake 태스크와 실행하는 매개변수는 무엇인가요?

해당 rake 태스크를 실행할 때, 태스크가 rebake를 시작할 때 출력되는 첫 몇 줄은 무엇인가요?

상세 정보, 스크린샷, 커맨드 라인에서 복사한 내용 등을 게시해 주세요.

죄송합니다 @neounix, 말씀이 100% 맞습니다.

다시 말씀드리겠습니다:

저는 이 명령어를 실행했습니다:

root@cont-web-only:/var/www/discourse# time rake posts:rebake_match['youtube',string]
        76597 / 76594 (100.0%)-
    76597 posts done!

그리고 나서 "아, 타이머를 추가해야 하는데, 그렇지 않으면 'Rate Limit Theory’를 테스트할 수 없잖아"라고 생각해서, 당신이 게시한 것을 시도해 보았습니다:

root@cont-web-only:/var/www/discourse# time rake posts:rebake_match['youtube',string,100]
            216 / 76594 (0.2%)-

그리고 잠시 멈추고 상황이 변하고 있는지 확인하러 갔습니다. 아마도 아무것도 변하지 않은 것 같아서, "좋아, 다시 실행해서 어떻게 되는지 보자"라고 생각했습니다:

root@cont-web-only:/var/www/discourse# time rake posts:rebake_match['youtube',string,100]
           116 / 76598 (0.2%)-

지금 이 명령어가 실행 중입니다. 제 주장은 다른 rebake 작업으로 인해 전체 게시물 수가 줄지 않았다는 것이었습니다. (이 논리에 제가 틀렸을 수도 있고, 실제로 틀렸을 수도 있습니다).