自定义导入器源文件放在哪里?

您好,

我一直在开发一个自定义的导入器,以便将数据从我们的 Woltlab 论坛导入到 Discourse。我通过在我的开发机上直接运行 Discourse(不使用 Docker)来实现这一点,现在我的 script/import_scripts/ 目录下包含我的迁移代码的许多文件。目前,这些文件位于官方 Discourse GitHub 仓库的一个 fork 中。

我现在希望迁移到一个官方的、基于 Docker 的安装,但我需要我的导入器代码在新安装中可用一段时间,因为迁移需要分阶段进行。如果可能的话,我想将导入器代码保存在一个单独的仓库中,并以一种干净的方式在新安装中使用。

我对 Rails 的了解有限,所以可能遗漏了一个明显的方法。有人能给我指明方向吗?

谢谢!
Hans

3 个赞

在这种情况下,我建议以下两种方法之一:

  1. 在滚动迁移期间,以你的分支为基础。如果你想包含新的功能,只需定期与上游同步你的分支。迁移完成后,切换回 discourse/discourse

  2. 在 docker 外克隆你的仓库并复制文件。在重建之后进行,否则预编译脚本会发现仓库不干净,构建会花费更长的时间。

我认为第一种方法是最好的。

4 个赞

谢谢,@RGJ!我将采用那种方式。

我在 Docker 容器内更改了存储库 URL,并成功运行了我的导入器。但是,当我运行 ./launcher rebuild app 时,存储库被重置为上游。我查看了 Dockerfile,它似乎硬编码了存储库路径,但看起来基础容器不是本地构建的,因此对 Dockerfile 的更改没有产生预期的效果。有什么官方的方法可以解决这个问题吗?

我建议使用两个容器。你可以通过复制当前的 app.yml 文件(可以在 /var/discourse/containers 中找到)并将其重命名为 import.yml 来实现。然后更新 version 参数为你自定义的导入分支。

params:
  version: your-branch

每次需要运行导入时,停止 app 容器,启动 import 容器,并在 import 容器中运行脚本。如果 Discourse 进行了重大更改,你可能需要将你的分支与核心的最新提交进行 rebase,并重建容器。

cd /var/discourse
./launcher enter import

# 想要切换到不同的分支?
su discourse -c 'git checkout <branch>'

# 想要拉取新代码?
su discourse -c 'git pull'

迁移完成后,停止导入容器并重新启动应用程序容器。

cd /var/discourse
./launcher stop import
./launcher start app

感谢 @gerhard 教会我这一切 :backhand_index_pointing_up:

6 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.