将Kunena 3论坛迁移到Discourse

It might make sense to import them as likes. A few importers do that and can serve as examples.

If you have a budget and need help, please see my contact information is in my profile.

2 个赞

FYI based on this howto I wrote this one:

1 个赞

Hi Jay. I am working on the Import now, I have successfully done my first import with the Kunena3 script (with a Kunena4 database).

I got users, categories and posts converted, but now I want to fine-tune the process and get more information. Can you please point me to which conversion scripts you think are more complete (with the Likes or any other extras)? Thanks!

What I do is grep the import script directory for what I’m looking for.

I’ve not imported likes before. I’m unclear whether setting the like count in the post model is all that is required or whether that field gets updated some other way.

You can also look in app/models to see what’s there.

2 个赞

Thanks! My database has info about which user liked which post. I’ll have to see how that fits into Discourse (if possible), but it’s not just a count, it’s a list of user names related to individual posts.

You’ll need to look into the rails models to see how those are updated.

Probably this part of app/models/post_action.rb to update counts:

    when :like
      # 'like_score' is weighted higher for staff accounts
      score = PostAction.joins(:user)
        .where(post_id: post_id)
        .sum("CASE WHEN users.moderator OR users.admin THEN #{SiteSetting.staff_like_weight} ELSE 1 END")
      Post.where(id: post_id).update_all ["like_count = :count, like_score = :score", count: count, score: score]

and maybe I’ll try using this to actually do the “like” which is a kind of PostAction:

https://github.com/discourse/discourse/blob/master/script/import_scripts/lithium.rb#L380-L469

This is my first time even looking at Ruby code… this will be fun…

3 个赞

You can use the following method, if you don’t want to do everything with SQL like the Lithium importer does:

PostAction.act(user, post, PostActionType.types[:like])
1 个赞

Thanks. It might be just my Ruby/Discourse newbieness tricking me, but it seems the Lithium importer is doing more stuff, I wonder if it is necessary? It seems to add rows both in UserActions and PostActions. And it has some extra logic to add only “missing” actions, why is that?

And if I use the method you suggest, do I still need to update Like counts, or does it take care of that? Thanks!

Calling PostAction.act should take care of all necessary stuff. The same method gets called when you like a post in the UI.

2 个赞

I wrote a couple importers before I knew ruby. My Programming Languages professor told us in 1986 that if a job requirement was to know some language, we didn’t need to worry. He was right.

I recommend doing things the rails way rather than mucking with the database directly.

6 个赞

有两个不同的 Kunena 导入脚本。一个是 kunena.rb,另一个是 kunena3.rb。Kunena 本身已更新至 6.x 版本。对于较新版本的 Kunena,应该使用哪个脚本?

我会尝试先使用 kunena.rb

1 个赞

@JetForMe

我刚刚将我的最终脚本发布为一个 gist。我真的不记得我做了什么,或者它对我的社区有多具体。但也许你可以将这些脚本与原始脚本进行 diff,看看我解决的一些问题以及我添加的一些内容。我试图使导入更完整,我讨厌在迁移中丢失信息。

–> importing-from-kunena-3-to-discourse · GitHub

–> importing-from-kunena-3-to-discourse-2 · GitHub

我希望这有帮助。

编辑:我刚想起来,我使用了 Ruby 脚本和 SQL 命令的混合(我推荐 DBWeaver 作为迁移期间实用的 SQL 控制台)。如果有兴趣,我可以发布 SQL 片段。

2 个赞

我已经成功安装了 mariadb-server 和 default-mysql-client(libmysqlclient-dev 已不存在)。
但现在我遇到了以下错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2)

那么,我该如何启动 mysql 实例?mysql.server start 不起作用。