Troubles moving from XenForo to Discourse

Hi, starting at step 7, I’m running into trouble. Any help would be greatly appreciated. I’ve never worked with Ruby before, so there may be some obvious steps needed right before step 7 that I just don’t know about due to lack of experience. Forgive me if this question comes across as naive.

When I run:

I get the following result:

-bash: Gemfile: Permission denied

This is on a brand new server with a working install of Discourse.

Are there other components or pieces of software I need to install to get the steps starting at 7 to work?

And I noticed this thread is from a few years ago originally. Is every step in the OP still correct?


Ok, I had a full post submitted here but I removed it because as I dig into this more, I realized that I had a serious misunderstanding of how dockers work with the Discourse install. My previous post would have confused people because, basically I didn’t know what I was talking about. :joy:

I was adding the import files manually to /var/discourse/ directory when I should have been looking for them within the docker. A clear mistake looking back at it, but I was pretty confused at the time. That could be more clear in the instructions, but I managed to figured that out and solve my own problem.


I managed to get this import to work on a 1M+ post forum. I noticed a few things.

  1. Avatars are missing. After looking at the script, I don’t see a reference to avatars. Just to confirm, they aren’t imported?

  2. Thread views are all 0. Is this how it’s supposed to be?

  3. Guest posts (if a user account had been deleted and their username marked as guest in xenforo) all show up as “system.” Is there a way to at least make these all day “guest” instead of system? Does Discourse support posts not attributed to a registered account?

Are there any import scripts that do support import of avatars and thread views? I’d like to take a look at those and see how difficult it would be to modify the xenforo.rb script.

I know vBulletin and xenforo databases very well. Just need to be pointed in the right direction for how thread views and avatars are stored in Discourse so I can properly map them.


None of those things is surprising.

I generally grep the script directory for the thing I’m looking for (Avatar) . I believe for the views you can just add it to the sql query and add the field to the create record. For the guest user there is a line that uses system if the user lookup fails. You can replace it with the guest user that you create.

I’ve looked through this script and can’t seem to find what is causing the IDs throughout to increment from 1 vs just match exactly what is in the source database.

I’d like to forward existing urls and the best way to do that is going to be if IDs throughout are maintained. User IDs, Post IDs, Topic IDs, Category IDs, etc.

They are all being “mapped” to new IDs by the script.

Am I missing something obvious that would allow me to force all IDs to stay the same post import?

If this question is beyond the scope of this forum, I understand. Thanks for reading regardless! :+1:

It is not. You need permalinks created for each user, post, topic, and category. See admin → customize → permalink. Many other importers have support for creating permalinks.