YouTube 嵌入缺失

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 请求过多错误的问题吗?

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

:thinking:

我也遇到过这个问题,这应该是一个临时的 IP 封禁(我相信是 1 小时),在此期间,所有重新生成的帖子中的 YouTube 内嵌框都会失败。

或许应该实施某种机制,限制每小时对 YouTube 的请求次数不超过 x 次,以防止重新生成时出现问题?

最近,在对我的 Discourse 安装进行一系列更改和升级后,还剩下两个问题未解决。一个是无法重建数据容器,我正在尝试解决;另一个是除了 YouTube URL 外,所有一一 box 都能正常工作。

在服务器和容器内部,我可以使用 CURL 访问 YouTube。我该如何确认这是否是由于临时 IP 封禁导致的?

编辑:可以确认,无论是重建(App)还是重新生成(Rebake)都不会影响此问题。

编辑 2:通过搜索,我看到 @jomaxro这里 评论说 CloudFlare 之类的内容会影响 Onebox……CDN 会影响单个 Onebox 吗?我尝试将其设置为开发模式,但没有变化。

编辑 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:

这或许可以缓慢地重新生成: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

编辑:过了一段时间后,我可以确认第二个命令的结果保持静态(数值不变),而第一个命令的结果持续增加。

匹配帖子中的字符串并不需要使用正则表达式。简单的字符串搜索就足以匹配 youtube(例如)。在此示例中,每个包含字符串 youtube 的帖子都将被重新烘焙,每 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

试过了,但不幸的是没有成功。

我开始觉得可能和 networking 有关?

抱歉 @iceman

作为一个有点极客的人,我不太明白“没有成功”具体指什么 :slight_smile:(技术信息不够详细)

你的意思是运行 rake 命令时出现了 Rails 错误吗?

如果是这样,请贴出完整的 Rails 错误信息。

或者,Rails 任务是否执行成功?如果成功了,根据 rake 任务统计有多少帖子被重新烘焙(rebaked)?

谢谢。

例如,我的一个小型(非常慢,延迟 100 秒)的重新烘焙任务示例(针对此主题)已经运行了好几个小时:

Screen Shot 2020-05-26 at 5.09.07 PM

目前进度为 209/762 总数……

你的重新烘焙任务进度是多少?

请原谅我之前的信息有误!

我的意思是,我先在一个小样本上运行了一次,然后重新运行,但数字没有变化。

例如:我运行了命令,当时有 76,000 篇帖子,处理了 200 篇后停止;再次运行后,新数字变成了 76,200(也许我的用户在此期间添加了 400 篇包含 YouTube 的帖子……但我不确定)。

现在我再次运行以观察进展,但这可能需要几天时间 :P(目前已有 76,500 次访问……)

由于其他人没有遇到此问题,我正在尝试思考我的变量,基本上包括:

  • 更换了机器(所以这 可能 是 YouTube 的速率限制?)
  • 在新安装上恢复了 Discourse 备份(这 不应该 相关,但到了这一步,我几乎在押注所有可能变动因素)
  • 双容器安装(原以为数据重建有问题,但 多亏了这条信息 来自 @Falco,我现在知道这是“正常”的)
  • 按照这里的 CDN 教程在其上部署了 CloudFlare。

[quote=“Iceman, post:19, topic:47718”]
德语原文:我运行了该命令,当时我有 76000 篇帖子。它处理了 200 篇后停止,接着又运行了一次,新的数量变成了 76200(是的,也许我的用户在此期间添加了 400 篇包含 YouTube 的帖子……但……我不确定)。[/quote]

抱歉我有点愚钝 :slight_smile: 您的意思是您正在运行这个 rake 任务吗?

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

准确写出您输入和看到的内容非常重要。

您运行的确切 rake 任务是什么?使用了哪些参数?

当您运行该 rake 任务时,任务开始重新烘焙(rebake)后的前几行输出是什么?

请提供详细信息、截图、从命令行复制粘贴的内容等。

抱歉,@neounix,您完全正确。

让我重新表述一下:

我运行了以下命令:

root@cont-web-only:/var/www/discourse# time rake posts:rebake_match['youtube',string]
        76597 / 76594 (100.0%)-
    76597 篇帖子处理完成!

然后我想:“好吧,显然你需要添加计时器,否则我们无法测试‘速率限制理论’”,于是我尝试了您发布的那个命令:

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 时,帖子总数并没有减少。(我可能是错的,甚至很可能确实是错的,我的这个逻辑可能有问题)。