Migrate from MVCforum to Discourse

I recently wrote some code to import from MVCforum:
The import logic can be found at https://github.com/Viir/import-to-discourse, packaged as an easy to use commandline tool.
It builds the SQL code needed to add the content and adds it to the SQL dump script obtained from a discourse backup.

What can be imported?

  • User accounts
  • Categories (the category description is mapped to category definition topic in discourse)
  • Topics
  • Tags on the topics
  • Posts
  • Upvotes on posts (mapped to likes in discourse)

Permalinks

With the software change, URLs for your content will also change.
For example, a thread found at thread/forum-software-upgrade/ on MVCForum will have a URL like t/forum-software-upgrade/118 on discourse.
The import code generates redirects from the URLs as used by MVCForum using the permalinks table in discourse.
The redirects enable your users to continue using their existing bookmarks and search engines to pick up the new URLs.

MVCForum models the post id in the ‘fragment’ portion of the URL which browsers normally don’t send to the server.
For this reason, we cannot redirect from old post URL to new post URL.
To redirect post URLs to the containing topic, add the following regex transform in the ‘permalink normalizations’ setting in discourse: /(thread.*)\?.*/\1

Overall process of importing

  • Use the Backup feature in discourse to create an SQL dump of the discourse database.
  • Use this program to add the data to be imported to the SQL dump file.
  • Use the Restore feature in discourse with the modified SQL dump.

Merging the MVCForum data into the SQL dump

First, export the data from the MVCForum database into a single file using the sql script in the file MvcForum.Export.To.Xml.sql.

Then run the import tool and supply the following arguments:

  • Path to the file containing the sql dump from discourse.
  • Path to the xml file containing the MVCForum export.

The tool then writes an sql script with the data merged from both databases into a new file.
After gzipping, you can apply it to your discourse instance using the restore function.

Tested versions

The tool has been tested for import from MVCForum v1.7 to Discourse v1.7.0. Your milage may vary in case you are using different versions.

4 Likes

Interesting solution! My concern is that an SQL script is more likely to be broken in future versions of Discourse if there are incompatible database changes. Hopefully, by now users, categories, topics and posts should be fairly stable and it won’t get broken anytime soon.

2 Likes

Thanks for the heads up. I am not sure how such a change could look like. When a new column without default or null value is introduced to one of the used tables, then the importing code will for sure need to be adjusted.

Since opening this topic, I added some more features which where important for my use case:

  • Tags on topics
  • Upvotes on posts (mapped to likes in discourse)
  • Permalinks are now too created by the tool
3 Likes