如何导入 bbPress images 和 links 301 重定向到 Discourse?

嘿,

我设法通过使用 bbpress.rb 脚本将 bbPress 的所有内容传输到 Discourse 的“开发环境”中。

但我有两个问题需要帮助:

  1. 所有图像在 Discourse 中都显示为“/wp-content/uploads/img_644e48aedc2bf.jpg”,这是 bbPress 媒体的 URL 路径,我该如何导入图像,使它们移动到 Discourse 的预期路径?

  2. 我 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 个赞

如果你指的是帖子中的图片,那么如果设置了“下载远程图片到本地”,Discourse 就会下载它们。应该有 sidekiq 作业来完成这项工作。

你可以查看其他关于“固定链接”的脚本。

简而言之,p=123 的值应该存储在 TopicCustomFieldsPostCustomField 中,名称为 import_id,然后你可以运行一个脚本来创建固定链接。

1 个赞

几分钟前,我激活了“将远程图像下载到本地”,并将所有图像下载到了本地服务器“bbPress”。如何激活 sidekiq 作业以在导入期间让 Discourse 下载它们?

抱歉给您带来不便,如何将所有链接从

www.old.com/%postname%/

重定向到

www.NewDiscourse.com/t/id/%postname%/

我认为 %postname%/ 并不相同

你只需要等待它们完成。如果你想修改脚本,让它在运行时处理上传,你可以查看其他执行此操作的脚本。

你可以查看其他创建永久链接的脚本。vbulletin.rb 中有一个永久链接的示例。

现有的 bbpress.rb 处理数据库中的附件,所以你必须有用户直接链接到它们,或者类似的东西?所以你需要用正则表达式找到它们,然后像其他上传函数那样处理它们。如果 Discourse 正在处理它们,那么你最好让它处理,因为我怀疑那会奏效。

1 个赞

感谢 @pfaffman @nizar9

我通过在控制面板中启用“下载远程图片”功能,成功地将所有图片从旧的 bbPress 文章保存并传输到了 Discourse。

但是 :cry: 我仍然卡在 301 重定向旧的 bbPress 链接,例如:

> https://www.demo.com/%postname%

到新的链接:

> www.NewDiscourse.com/t/id/%postname%/

并且我无法通过 htaccess 正则表达式解决这个问题,因为我不知道同一个主题的新 ID 是什么。

你不能。至少有一个导入脚本会转储数据,以便你可以。正如我之前所说,可以通过创建 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 个赞

上传将无法正常工作。Discourse 会给它们全部重命名。我没注意到他们想要图片重定向。我从未见过有人要求过这个。

对于 Discourse 和 bbpress 恰好使用相同 slug 的某些主题,这可能有效。