Discourse is on the way

本贴更新迁移论坛到 discourse 系统的相关事宜。

目前的进展:

  1. @guoyunhe 解决了 discourse 的中文用户名问题:https://github.com/openSUSE-zh/discourse-username-localization,全部实现插件化。
  2. 我买了个阿里云。成功升级到了 tumbleweed。SDB:Upgrade Aliyun ECS - openSUSE
  3. discourse 搭建完。SDB:Discourse without Docker - openSUSE
    2.1 postgresql 完成
    2.2 redis 完成
    2.3 discourse 完成。使用的是 home:darix:apps 源里的 discourse。主要由 openSUSE 的 infrastructure manager 也就是 SA @darix 维护,我负责维护其中的 rubygem-libv8 部分。
  4. 把 phpbb 3.0 论坛的用户帖子什么的迁移过去,测试成功。
  5. ruby 手写几个转换器:
    4.1 把 mysql 数据库中的金币按照公式转换成 discourse 的 trust level
    4.2 把 mysql 数据库中的感谢转换成 discourse 的 likes
    4.3 把 mysql 数据库中的徽章转换成 discourse 的徽章。

TODO:

  1. 测试无误后,关站进行实际转换。
    5.1 转换本身大概需要两到三天,我要先把数据灌到阿里云,然后用 discourse 的备份功能备份出来,再联系凤凰把现在的 VPS 内存加大,然后在现在的 VPS 上搭建 discourse,再灌回去。
2赞

苏姐威武,,,看着有点复杂,希望不会跳票,哈哈! :heart_eyes:

1赞

更新:discourse 已经搭建成功,但是阿里云不让我用 80 端口,必须备案,我暂时用的 87 端口。但是激活管理员账户的邮件点一下,回来发现那个激活账户的 button 不让点。暂时不知道原因。

1赞

用阿里海外服务器吧,不然备案是绕不过的。或者把 suse.org.cn 备案成个普通网站,这样所有子域名就都能在阿里的服务器绑定了。

1赞

我以前做实验的时候碰到过同样的事情,当时是按照 http://blog.csdn.net/u012973744/article/details/18910381,这里的方法解决的。时间很久了,不知道现在还是否有效,您可以试试哈!

换了 Chrome 浏览器,之前的问题解决了,现在 discourse 已经完全跑起来了。

从现有的论坛导出了今天的数据,明天准备跑测试看看带着插件的数据能不能运行,否则就要重新导出数据库,去掉插件的数据表。

发来贺电,如果需要帮助请绰我 Telegram (相同 ID)
话说突然想起来之前说把数据库备份弄出来测试迁移一直忘了发…

更新:在跑测试了。思路是如果有错误,就回这边编辑帖子让它能在不损失内容的情况下通过转换。有两个特别长的贴 log 的帖子完全无法转换,原因还没 debug。现在 debug 的是似乎用了 quote 的帖子就无法转换,我居然在 v8 里 debug javascript…

从我的 iPhone 发送,使用 Tapatalk

更新,帖子测试完毕,全部都能够迁移。但是头像没过去,原因不明。

更新:

头像没过去的原因找到了,中文名插件的问题,明天修复。

另外迁移感谢到 likes 的脚本已经开始写了

从我的 iPhone 发送,使用 Tapatalk

看来真正迁移的时候得让 @phoenixlzx 把服务器内存暂时加大到 8G…2G sidekiq 总卡死……

头像的问题还需要 debug,插件修好了也不行

从我的 iPhone 发送,使用 Tapatalk

头像是小问题,没必要在这上边浪费太多时间,大不了都自己再设置下就是了

头像问题解决了,是 app/models/optimized_image.rb 函数里面调用 Imagemagick 进行 resize,TW 的版本高,bicubic 这个 interpolate 参数变成了 catrom 导致的。

从我的 iPhone 发送,使用 Tapatalk

现在就剩下几个转换器没写,预计一个礼拜写好一个。另外 discourse 内置的 bbcode to markdown 转换器 very buggy,是用 sidekiq 作业,超级卡,在后台会影响主站的访问。准备自己写一个 rubygem 再套一个 script 来直接把 mysql 数据库的数据先行转换成 markdown,这样上线后会很平稳。预计还有四个礼拜吧。

从我的 iPhone 发送,使用 Tapatalk

OT: 今天更新 SSL 证书的时侯发现论坛域名的解析配置不对,AAAA 记录指向的是 loopback 地址… 机器上实际没有 IPv6 地址,所以 AAAA 记录应该留空,或者貌似 Vultr 需要在后台选一下启用 IPv6 然后手工配来着

@marguerite 苏姐我木有 DNS 和 Vultr 后台的权限,得你有空了去搞下

@AstroProfundis 好像因为以前有,再不就是以前用什么软件搞出过 IPv6 因为教育网……我周一看看。DNS 是我自己域名的 cloudns 我有后台,Vultr 我也没有只有 @phoenixlzx 才有

从我的 iPhone 发送,使用 Tapatalk

更新:帖子预处理引擎 rubygem-bb2md 完成

从我的 iPhone 发送,使用 Tapatalk

更新:discourse-phpbb3-posts 完成。能够把处理好的帖子灌回 mysql 数据库了。另外还做了两个插件,rubygem-SUSE_typo,专门改一些英文名词的写法的,rubygem-latincjk,专门给中英文加空格的。

@AstroProfundis 我把 IPv6 的记录删除了。

更新:thanks mod 的转换,目前已经能够把 thanks 数据从 mysql 数据库中提出来并 map 成 postgresql 数据库表中对应的值了。下面要做的是用这些值去更新 discourse 的 likes。

discourse 的 likes 机制是这样的:用户点击 like 按钮,发起一个 post action 去向 post_actions 表写入一个类型为 2 的 action,对应去更新 daily likes count 和 posts 表,post 表有 like_count,like_score,score 和 percent_rank 四个值需要去添,其中 percent_rank 比较难填,需要模拟 sql 算法或者直接用 sql 做。接着更新 topics 和 top_topics,前者跟 posts 差不多,后者有一些算法。最后是发起一个 user_action 去更新 user_stats,就是你收了多少 likes 又给出多少。然后是 directory items 就是用户汇总页。还有 badge_posts 里面对应的值。

从我的 iPhone 发送,使用 Tapatalk