将phpBB3论坛迁移到Discourse

我把它们放进去了,但没有任何区别。

不确定这些是粘贴时产生的错误,还是您的 yml 文件中实际的样子,但这些会导致问题。(某些注释末尾的换行符,导致存在第二行未注释的行)

您的列表项缩进不正确。

上面应该写成

  new_categories: 
    - forum_id: general
      name: General

我建议使用 https://www.yamllint.com/ 来验证您的配置文件。

3 个赞

感谢您的所有回复。我很快就发现,在导入容器外部编辑 settings.yml 不会影响正在运行的内容。我也明白了 yml 空格的问题,并更正了我的设置文件。无论如何,phpBB 论坛的导入进行得很顺利,除了……

我在 phpBB 上的用户名与我在 Discourse 上的管理员帐户相同。我无法登录,并且有一条消息显示:

所有发件电子邮件均已被管理员全局禁用。不会发送任何类型的电子邮件通知。

因此,我无法收到重置密码的电子邮件。这是数据库设置吗?如果是,我能否使用容器的有限资源更新该字段?还有其他想法吗?

请注意,我安装了 migratepassword 插件,但似乎不起作用(也许是因为我的密码少于 15 个字符)

您可以通过 rails 控制台启用管理员用户的电子邮件:

./launcher enter import
rails c

> SiteSetting.disable_emails = "non-staff"

您也可以直接从容器重置密码,无需使用电子邮件,方法是运行:

./launcher enter import
rake admin:create
3 个赞

我可以建议对这份文档(以及代码)做一些修改:

  • 这不再需要了,因为 disable_edit_notifications 设置已不存在。disable system edit notifications 具有提到的功能,并且默认启用。
  • app.yml 中的两行 SSL 默认未被注释掉,因此删除这两个 # 会使摘录更准确地反映其应有的样子。
  • 此模板应进行更新,以避免用户在导入时遇到此错误。

  • 另外这个(除非我哪里弄错了,这也应该被修复):
    运行 IMPORT=1 bundle install 返回:

[!] 解析 `Gemfile` 时出错:您不能为同一个 gem 指定不同的版本要求。
您指定了:sqlite3 (~> 1.3, >= 1.3.13) 和 sqlite3 (>= 0)。Bundler 无法继续。

   # 来自 /home/root/discourse/Gemfile:249
   # -------------------------------------------
   # group :generic_import, optional: true do
   >    gem "sqlite3"
   #    gem "redcarpet"
   # -------------------------------------------

确实,sqlite3 已经在上面的几行中指定了:

    # 注意:在导入模式下,sqlite 的版本可能非常重要,因此我们将其固定为特定版本
    gem "sqlite3", "~> 1.3", ">= 1.3.13"
    gem "ruby-bbcode-to-md", git: "https://github.com/nlalonde/ruby-bbcode-to-md"
    gem "reverse_markdown"
    gem "tiny_tds"
    gem "csv"
  end

  group :generic_import, optional: true do
    gem "sqlite3"
    gem "redcarpet"
  end

我导入时使用的是开发环境安装,如果这很重要的话。

5 个赞

这些信息应该在说明中提及,或者应更新模板。这花费了我几个小时……

需要说明什么?

删除此行使得容器的成功构建成为可能。

1 个赞

所以你删除了这一行?

1 个赞

是的,这就是解决方案。

1 个赞
4 个赞

“您好,我已成功将我的 phpBB 论坛迁移到 Discourse,一切顺利,论坛运行良好。现在我意识到在 FTP 下载 phpBB 数据时没有启用二进制模式,这意味着所有图像都已损坏。我再次运行了脚本,但图像没有被覆盖。我需要修改哪个脚本(最好附带路径),以便覆盖损坏的图像和附件?”

在第二次尝试中,Discourse 会跳过上传,因为它们已存在于 uploads 表中。Discourse 会避免覆盖现有上传,除非明确指示。

你可以在 attachment_importer.rb (discourse/script/import_scripts/phpbb3/importers/attachment_importer.rb at main · discourse/discourse · GitHub) 中调用 @uploader.create_upload 之前添加下面的代码片段,这将确保任何具有相同文件名的现有上传 首先被删除,强制 Discourse 重新上传它。

existing_upload = Upload.find_by(original_filename: filename)
if existing_upload
  existing_upload.destroy
  puts "Deleted existing upload: #{filename}"
end

upload = @uploader.create_upload(user_id, path, filename)
4 个赞

“感谢您的回复。遗憾的是,更改没有任何效果。脚本在一分钟内运行完成,但附件未被覆盖……”

1 个赞

您可能需要擦除数据库并重新运行它。

1 个赞

我该怎么做?

步骤 1: 通过 SSH 连接到服务器:

ssh username@server-address

步骤 2: 访问应用程序容器:

./launcher enter import

提示:运行 docker ps 以查找容器名称。默认情况下,它通常命名为 app

步骤 3: 重置数据库:

RAILS_ENV=production rake db:reset
3 个赞

嘿 Canapin,

我已更新指南中的这部分。

这取决于具体情况。在为本地主机设置容器时,它仍然被注释掉了。该指南假设导入使用单独的容器,该容器无法通过互联网访问,因此在这种情况下无需获取证书。

此 PR 已合并到核心。

我们正在努力解决此问题,但我已更新指南并添加了 FAQ,说明如何解决此问题。

4 个赞

当 Discourse 在子目录中运行时,例如 domain.org/forum,永久链接将不适用,因为它们是 viewtopic.php?p=XXXX 这样的形式,但需要是 forum/viewtopic.php?p=XXXX 才能工作。

已经过去很多年了,但我偶然发现了我们配置中从未生效过的永久链接。是否有图形用户界面/命令行方法可以将 URL 路径元素添加到所有永久链接的前面,或者有人可以添加一个 PostgreSQL 查询来执行此操作?如果将此信息添加到首个帖子中,也可能对其他人有所帮助。