嘿,
我设法通过使用 bbpress.rb 脚本将 bbPress 的所有内容传输到 Discourse 的“开发环境”中。
但我有两个问题需要帮助:
-
所有图像在 Discourse 中都显示为“/wp-content/uploads/img_644e48aedc2bf.jpg”,这是 bbPress 媒体的 URL 路径,我该如何导入图像,使它们移动到 Discourse 的预期路径?
-
我 bbPress 的默认固定链接是这样的 \"www.demo.com/%postname%/\",bbPress 也使用固定链接
\"www.demo.com/?p=123\"
在 sql 中。我的问题是如何编辑 bbpress.rb 代码,以便稍后可以导入旧链接并无缝重定向到新的 Discourse 链接 301?
这样,当用户尝试访问旧网站
www.demo.com/%postname%/
时,链接将 301 重定向到新的链接
\"https://my-discoursexxxx.com/t/1234/%postname%\"
你能帮我解决这些问题吗?
您好,
对于 1,您需要更改 bbpress 脚本,将头像从文件夹复制并上传到您的 Discourse 实例。您可以查看 vbulletin 导入脚本 来了解如何实现这一点,具体请参见第 212 行。
至于 2,这实际上会更复杂一些,因为 Discourse 无法访问外部网站的数据(例如 http://www.demo.com)。因此,实现这一目标的最佳方法是保留相同的域名,并对 create_permalinks(第 379 行)函数进行一些小的更改,以支持 postname 参数。
1 个赞
pfaffman
(Jay Pfaffman)
3
如果你指的是帖子中的图片,那么如果设置了“下载远程图片到本地”,Discourse 就会下载它们。应该有 sidekiq 作业来完成这项工作。
你可以查看其他关于“固定链接”的脚本。
简而言之,p=123 的值应该存储在 TopicCustomFields 或 PostCustomField 中,名称为 import_id,然后你可以运行一个脚本来创建固定链接。
1 个赞
几分钟前,我激活了“将远程图像下载到本地”,并将所有图像下载到了本地服务器“bbPress”。如何激活 sidekiq 作业以在导入期间让 Discourse 下载它们?
抱歉给您带来不便,如何将所有链接从
www.old.com/%postname%/
重定向到
www.NewDiscourse.com/t/id/%postname%/
我认为 %postname%/ 并不相同
pfaffman
(Jay Pfaffman)
5
你只需要等待它们完成。如果你想修改脚本,让它在运行时处理上传,你可以查看其他执行此操作的脚本。
你可以查看其他创建永久链接的脚本。vbulletin.rb 中有一个永久链接的示例。
现有的 bbpress.rb 处理数据库中的附件,所以你必须有用户直接链接到它们,或者类似的东西?所以你需要用正则表达式找到它们,然后像其他上传函数那样处理它们。如果 Discourse 正在处理它们,那么你最好让它处理,因为我怀疑那会奏效。
1 个赞
感谢 @pfaffman @nizar9
我通过在控制面板中启用“下载远程图片”功能,成功地将所有图片从旧的 bbPress 文章保存并传输到了 Discourse。
但是
我仍然卡在 301 重定向旧的 bbPress 链接,例如:
> https://www.demo.com/%postname%
到新的链接:
> www.NewDiscourse.com/t/id/%postname%/
并且我无法通过 htaccess 正则表达式解决这个问题,因为我不知道同一个主题的新 ID 是什么。
pfaffman
(Jay Pfaffman)
7
你不能。至少有一个导入脚本会转储数据,以便你可以。正如我之前所说,可以通过创建 Permalink 重定向来解决 Discourse 中的问题。
将图像从 bbPress 导入到 Discourse,
这是一个 bbpress.rb 脚本示例。
它将头像图像从 bbPress 目录复制并上传到您的 Discourse 实例。
# bbpress.rb
# 导入 bbPress 头像并更新 Discourse 头像
def import_avatars
users.each do |user|
bbpress_avatar_path = "/path/to/bbpress/avatars/#{user['avatar_filename']}"
next unless File.exist?(bbpress_avatar_path)
avatar_upload = File.open(bbpress_avatar_path)
DiscourseAvatar.create_for(user['email'], avatar_upload, override_gravatar: true)
end
end
# 调用函数
import_avatars
现在创建 create_permalinks 函数来生成适当的 URL 并处理 301 重定向。
# bbpress.rb
# 创建带有 postname 参数的永久链接并处理重定向
def create_permalinks
permalinks.each do |permalink|
topic_id = permalink['topic_id']
postname = extract_postname_from_permalink(permalink['url']) # 实现此函数以提取 postname
topic_link = "https://my-discoursexxxx.com/t/#{topic_id}/#{postname}" # 修改此行以使用正确的 URL 结构
create_discourse_permalink(topic_id, permalink['url'], topic_link)
create_redirect(permalink['url'], topic_link) # 实现此函数以创建 301 重定向
end
end
# 调用函数
create_permalinks
create_redirect 函数应添加从旧 bbPress 永久链接到新 Discourse URL 的 301 重定向。
注意:根据您的需要替换路径。
希望它能工作。
1 个赞
pfaffman
(Jay Pfaffman)
9
上传将无法正常工作。Discourse 会给它们全部重命名。我没注意到他们想要图片重定向。我从未见过有人要求过这个。
对于 Discourse 和 bbpress 恰好使用相同 slug 的某些主题,这可能有效。