本指南介绍如何使用 Rails 控制台的高级选项,重新烘焙(rebake)所有匹配特定字符串或正则表达式的 Discourse 帖子。
所需用户级别:管理员
需要控制台访问权限
想要重新烘焙所有匹配特定字符串或正则表达式的帖子吗?让我们开始吧!
访问您的站点
首先,通过 SSH 连接到您的 Discourse Droplet,并进入 Discourse 实例的 Docker 容器:
cd /var/discourse
./launcher enter app
重新烘焙包含特定字符串的所有帖子
使用以下命令,将 pattern 替换为您要匹配的字符串。此搜索不区分大小写。
rake posts:rebake_match["pattern"]
例如,要重新烘焙原始内容中包含 :slight_smile: 的所有帖子:
rake posts:rebake_match[":slight_smile:"]
重新烘焙匹配正则表达式的所有帖子
PostgreSQL 使用 POSIX 正则表达式 执行正则匹配。匹配过程不区分大小写。系统会自动应用换行敏感标志 (
(?n)),这意味着.不会匹配换行符,而^/$将在行边界处匹配。
对于正则表达式,请使用以下命令:
rake posts:rebake_match["pattern",regex]
示例:
-
重新烘焙包含
:slight_smile:或Discourse的帖子:rake posts:rebake_match[":slight_smile:|Discourse",regex] -
重新烘焙以
Today开头的帖子:rake posts:rebake_match["^Today",regex] -
重新烘焙以
Today或Yesterday开头的帖子:rake posts:rebake_match["^(Today|Yesterday)",regex]
重新烘焙之间的可选延迟
若要在每次重新烘焙执行之间添加 5 秒延迟,请修改命令如下。将 5 调整为您需要的任意秒数:
rake posts:rebake_match["pattern",string,5]
高级:使用 Rails 控制台
对于 rake 任务无法满足的任务,请使用 Rails 控制台。
访问 Rails 控制台
在 Docker 容器内启动 Rails 控制台:
rails c
使用 rebake uncooked rake 任务
将目标帖子设置为“未烘焙”状态以进行重新烘焙。运行设置后退出 Rails 控制台,然后执行重新烘焙命令:
重新烘焙整个分类:
rails c
Post.joins(:topic).where('topics.category_id = 136').update_all('baked_version = NULL')
exit
rake posts:rebake_uncooked_posts
在 Rails 控制台中执行循环
若要执行细粒度操作,请选择帖子数组并直接重新烘焙每个帖子。
特定用户的帖子
user = User.find_by_username('user123')
posts = Post.where(user_id: user.id)
posts.each do |p|
p.rebake!
end
包含特定字符串的帖子
posts = Post.where("cooked like '%OldCDN%'")
posts.each do |p|
p.rebake!
end