Importing from phpBB3


(Gerhard Schlager) #1

So, you discovered Discourse and want to know how to migrate from your existing phpBB3 forum?

Great! Then keep on reading. This guide will show you how to use the phpBB3 import script for importing from phpBB 3.0.x and 3.1.x.

:warning: Importing from phpBB 3.2 is currently not supported.

What data can be imported?

  • Users
    • Avatars (optional)
    • Anonymous users (either as user “system” or as suspended users)
    • Password hashes, which can be used with the migratepassword plugin (optional)
  • Categories and Forums
  • Topics and Posts
    • Polls and votes (optional)
    • Smilies
    • BBCodes
    • Internal links to topics and posts
  • Sticky topics and (global) announcements
  • Private Messages (optional)
  • Attachments (optional)
  • Bookmarks (optional)
  • Permalinks for imported categories, topics and posts (optional)

1. Importing using Docker container

This is the recommended way for importing content from your phpBB3 forum into Discourse.

1.1. Installing Discourse

Install Discourse by following the official installation guide.
Afterwards it’s a good idea to go to the Admin section and configure a few settings:

  • Enable login_required if imported topics shouldn’t be visible to the public
  • Enable hide_user_profiles_from_public if user profiles shouldn’t be visible to the public.
  • Disable download_remote_images_to_local if you don’t want Discourse to download images embedded in posts.
  • Enable disable_edit_notifications if you enabled download_remote_images_to_local and don’t want your users to get lots of notifications about posts edited by the system user.
  • Change the value of slug_generation_method if most of the topic titles use characters which shouldn’t be mapped to ASCII (e.g. Arabic). See this post for more information.

:bangbang: The following steps assume that you installed Discourse on Ubuntu and that you are connected to the machine via SSH or have direct access to the machine’s terminal.

1.2. Preparing the Docker container

Copy the container configuration file app.yml to import.yml and edit it with your favorite editor.

cd /var/discourse
cp containers/app.yml containers/import.yml
nano containers/import.yml

Add - "templates/import/phpbb3.template.yml" to the list of templates. Afterwards it should look something like this:

  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Uncomment these two lines if you wish to add Lets Encrypt (https)
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"
  - "templates/import/phpbb3.template.yml"

That’s it. You can save the file, close the editor and build the container.

/var/discourse/launcher stop app
/var/discourse/launcher rebuild import

Building the container creates an import directory within the container’s shared directory. It looks like this:

├── data
├── mysql
└── settings.yml

1.3. Configuring the importer

You can configure the importer by editing the example settings.yml file that has been copied into the import directory.

nano /var/discourse/shared/standalone/import/settings.yml

The settings file is well documented and comes with sensible defaults, but here are a few tips anyway:

1.3.1. Connecting to a remote database

Change the database host, port, username, password and schema if you want to connect to a remote database. Make sure that your MySQL server allows remote connections.

1.3.2. Connecting to internal database

The Docker container comes with a MariaDB server which is compatible with MySQL. You don’t need to change any database settings if you are going to use it. All you need is a database dump which you can create in multiple ways. Here are two of them:

  • Create a database backup in phpBB’s Administration Control Panel

  • Connect to the database host and create a database dump:

    # replace the last parameter "phpbb" with the database schema name
    mysqldump --user root --password --result-file phpbb_mysql.sql phpbb

Copy the database dump into the /var/discourse/shared/standalone/import/data/ directory. You need to extract the file if you created a gzip or bzip2 compressed backup and make sure that the file is named phpbb_mysql.sql

1.3.3. Other settings

  • Change the table_prefix in case your phpBB forum isn’t using the default naming for database tables.
  • Make sure the phpbb_base_dir points to /shared/import/data

1.4. Copying attachments and images

You can skip this step if you don’t want to import attachments, avatars or smilies.

Connect to your phpBB3 host using FTP or SCP and download the following directories into the /var/discourse/shared/standalone/import/data directory:

  • Attachments are usually stored in the files directory. You can make sure by checking the path in the Administration Control Panel.

  • Avatars are usually stored in the images/avatars directory. You can make sure by checking the path in the Administration Control Panel.

  • Smilies are stored in the images/smilies directory.

The import directory should look like this if you downloaded all of those directories:

├── data
│   ├── files
│   ├── images
│   │   ├── avatars
│   │   │   ├── gallery
│   │   │   └── upload
│   │   └── smilies
├── mysql
└── settings.yml

1.5. Executing the import script

:bulb: Tip: It’s a good idea to start the import inside a tmux or screen session so that you can reconnect to the session in case of SSH connection loss.

Let’s start the import by entering the Docker container and launching the import script inside the Docker container.

/var/discourse/launcher enter import # inside the Docker container

Depending on the size of your forum it’s now time for some :coffee: or :sleeping:
The import script will show you a message like this when it’s finished: Done (00h 26min 52sec)

And while you are waiting for the import to finish you can take a look at the FAQ.

:bulb: Tip: You can abort the import anytime you want by pressing Ctrl+C
When you restart the import it will continue where it left off.

You can exit and stop the Docker container after the import has finished.

exit # inside the Docker container
/var/discourse/launcher stop import

1.6. Starting Discourse

Let’s start the app container and take a look at the imported data.

/var/discourse/launcher start app

Discourse will start and Sidekiq will begin post-processing all the imported posts. This can take a considerate amount of time. You can watch the progress by logging in as admin and visiting

1.7. Clean up

So, you are satisfied with the result of the import and want to free some disk space? The following commands will delete the Docker container used for importing as well as all the files used during the import.

/var/discourse/launcher destroy import
rm /var/discourse/containers/import.yml
rm -R /var/discourse/shared/standalone/import

1.8. The End

Now it’s time to celebrate and enjoy your new Discourse instance! :tada:

2. Importing using development environment

The following instructions are for users who want to import using a development environment.

  1. Setup your development environment by following the guides for Ubuntu or Mac OS X.
    The following instructions assume that you are using Ubuntu.

  2. Make sure that neither Discourse nor Sidekiq are running.

  3. Install some dependencies:

    sudo apt-get update
    sudo apt-get install libmysqlclient-dev
    cd ~/discourse
    echo "gem 'mysql2'" >> Gemfile
    echo "gem 'ruby-bbcode-to-md', :github => 'nlalonde/ruby-bbcode-to-md'" >> Gemfile
    bundle install
    git checkout Gemfile Gemfile.lock
  4. Configure your import. There’s an example settings file at ~/discourse/script/import_scripts/phpbb3/settings.yml

  5. Start your import (change the path to your settings file if you put your custom settings somewhere else):

    cd ~/discourse/script/import_scripts
    ruby phpbb3.rb phpbb3/settings.yml
  6. Wait until the import is done. You can restart it if it slows down to a crawl.

  7. Start your Discourse instance: bundle exec rails server

  8. Start Sidekiq and let it do its work: bundle exec sidekiq
    Depending on your forum size this can take a long time. You can monitor the progress at http://localhost:3000/sidekiq

3. Roadmap

Here’s a list of things that are still missing from the importer (in no particular order) :

  • Add support for phpBB 3.2
  • Add support for the cakeday plugin
  • Imported text that looks like Markdown should be escaped
  • Close topics that are closed in phpBB3
  • Import unapproved posts as hidden posts
  • Import read status for each post and private message
  • Import custom profile fields
  • Import groups
  • Improve the BBCode to Markdown converter (ruby-bbcode-to-md)
  • Support custom patterns for internal links to topics and posts (SEO optimized URLs)
  • Add support for more database sources: MS SQL Server, Oracle, PostgreSQL

Feel free to start your favorite Ruby IDE and help making the importer even better. :wink:

4. FAQ

4.1. I have a heavily modified forum. Will the import script still work?

Maybe. It depends on what changes those mods made to the database. You’ll have to give it a try.

4.2. Why is the import process so slow?

Importing is CPU-bound. You should use CPUs with fast single-core speed if you are in a hurry. You get an import speed of about 400–600 posts/minute on a typical DigitalOcean server. Bare metal servers, and probably also your desktop computer, are usually about twice as fast.

4.3. I have a large forum with lots of users and posts. How can I minimize the downtime during the import?

You can do incremental imports in order to shorten the downtime.
But be warned: There’s a small risk of data loss when you do an incremental import, because existing posts and users aren’t updated during incremental imports. You’ll lose post edits that occurred between imports as well as changes made to user profiles.

4.4. Can I run the Docker based import on my desktop computer or a staging server?

Of course. You can move your Discourse instance to a different server after the import has finished. Take a look at this How-To for instructions.

4.5. Does the script send any emails during the import?

Sending of emails is disabled during the import and Discourse holds off on sending summary emails to imported users for some time. This can be configured with the site setting default_email_digest_frequency which defaults to 7 days.

4.6. Which version of Discourse should I use for importing?

It is recommended to always use the tests-passed or beta channel of Discourse for imports since the import script is being constantly improved. So, make sure that the value of version is set accordingly in the app.yml and import.yml configuration files. Everything should be fine if you followed the official installation guide.

4.7. I enabled the import of passwords. Why can't my users login with their old passwords?

Make sure that you enabled the migratepassword plugin in app.yml by following the How-To for installing plugins. Also, users won’t be able to login with their old password if it’s considered insecure. By default Discourse requires a minimum password length of 10 chars (for admins it’s 15) and the password must not be on the list of common passwords. But users can always reset their password by clicking the “I forgot my password” link on the login dialog or directly by visiting

4.8. The import was successful, but the user list is empty. What is wrong?

The list of users won’t show up right away. It is generated by a background task which is executed by Sidekiq. You’ll probably have to wait until all the post-processing of the imported data is finished.

4.9. I have custom smilies in my forum. Are they imported?

Yes. You can map them to Emojis in the settings file, otherwise they’ll get imported as images. All the default smilies (except and ) already have an Emoji mapping.

Can't start PHPBB3 Importer
Migrating a PhpBB2 forum to Discourse
phpBB 3 Importer (old)
Migrating longstanding forum / wiki to Discourse
Unable to correct problems, you have held broken packages when trying to run a phpBB importer
Image URLs not rendered as images on import
[infinite loop around text selection] Not possible quote text with emoticon in Firefox 57
Wordpress blog, comments and manually copying it to Discourse
Error Trying to Start Import Process - Xenforo to Discourse
Lot of sidekiq jobs during data import
How to use the bbpress import script - or any other import script with mysql dependency
Import into hosted service
Example Code in PHP how to Create a new User
Line breaks in code blocks don't work without a linebreak above
Does this software allow admin to put Adsense ads in?
Ruby-bbcode-to-markdown removes https
Beginners Guide to Install Discourse on Ubuntu for Development
[PAID] Install Discourse on Plesk and import phpBB data
Phpbb import: no users imported
Post your Discourse T-shirt pics!
Cannot login to dev instance with imported user
Can't open History popup after using browser back button
Importing from PHP Question2Answer
phpbb3.1 import database to Discourse : error in your SQL syntax
(Erlend Sogge Heggen) #2

Importing password hashes is now in core, thanks to @gerhard:


Hey, awesome script! I ran into a seg fault with one of the gems it uses. Hopefully, it’ll be obvious to one of you guys! Wrong version of something maybe? Here’s part of the error output:

ruby phpbb3.rb phpbb3/settings.yml
loading existing groups...
loading existing users...
loading existing categories...
loading existing posts...
loading existing topics...

importing from phpBB 3.0.11

creating users
/usr/lib/ruby/gems/2.2.0/gems/rack-mini-profiler-0.9.7/lib/patches/db/mysql2.rb:6: [BUG] Segmentation fault at 0x00000000000488
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0016 p:---- s:0061 e:000060 CFUNC  :each
c:0015 p:0020 s:0058 e:000057 METHOD /usr/lib/ruby/gems/2.2.0/gems/rack-mini-profiler-0.9.7/lib/patches/db/mysql2.rb:6
c:0014 p:0045 s:0050 E:0005f0 METHOD /home/jpotts/workspace/discourse/script/import_scripts/base.rb:226
c:0013 p:0059 s:0041 E:000960 BLOCK  /home/jpotts/workspace/discourse/script/import_scripts/phpbb3/importer.rb:61
c:0012 p:0008 s:0037 e:000036 BLOCK  /home/jpotts/workspace/discourse/script/import_scripts/base.rb:670 [FINISH]
c:0011 p:---- s:0035 e:000034 CFUNC  :loop
c:0010 p:0012 s:0032 e:000031 METHOD /home/jpotts/workspace/discourse/script/import_scripts/base.rb:669
c:0009 p:0015 s:0027 e:000026 METHOD /home/jpotts/workspace/discourse/script/import_scripts/phpbb3/importer.rb:151
c:0008 p:0035 s:0024 E:0002a0 METHOD /home/jpotts/workspace/discourse/script/import_scripts/phpbb3/importer.rb:55
c:0007 p:0027 s:0019 e:000018 METHOD /home/jpotts/workspace/discourse/script/import_scripts/phpbb3/importer.rb:28
c:0006 p:0029 s:0016 e:000015 METHOD /home/jpotts/workspace/discourse/script/import_scripts/base.rb:45
c:0005 p:0013 s:0012 e:000011 METHOD /home/jpotts/workspace/discourse/script/import_scripts/phpbb3/importer.rb:20
c:0004 p:0108 s:0009 E:001948 CLASS  phpbb3.rb:31
c:0003 p:0011 s:0006 E:000b50 CLASS  phpbb3.rb:12
c:0002 p:0133 s:0004 E:000be0 EVAL   phpbb3.rb:11 [FINISH]
c:0001 p:0000 s:0002 E:0016a0 TOP    [FINISH]

-- Ruby level backtrace information ----------------------------------------
phpbb3.rb:11:in `<main>'
phpbb3.rb:12:in `<module:ImportScripts>'
phpbb3.rb:31:in `<module:PhpBB3>'
/home/jpotts/workspace/discourse/script/import_scripts/phpbb3/importer.rb:20:in `perform'
/home/jpotts/workspace/discourse/script/import_scripts/base.rb:45:in `perform'
/home/jpotts/workspace/discourse/script/import_scripts/phpbb3/importer.rb:28:in `execute'
/home/jpotts/workspace/discourse/script/import_scripts/phpbb3/importer.rb:55:in `import_users'
/home/jpotts/workspace/discourse/script/import_scripts/phpbb3/importer.rb:151:in `batches'
/home/jpotts/workspace/discourse/script/import_scripts/base.rb:669:in `batches'
/home/jpotts/workspace/discourse/script/import_scripts/base.rb:669:in `loop'
/home/jpotts/workspace/discourse/script/import_scripts/base.rb:670:in `block in batches'
/home/jpotts/workspace/discourse/script/import_scripts/phpbb3/importer.rb:61:in `block in import_users'
/home/jpotts/workspace/discourse/script/import_scripts/base.rb:226:in `create_users'
/usr/lib/ruby/gems/2.2.0/gems/rack-mini-profiler-0.9.7/lib/patches/db/mysql2.rb:6:in `each'
/usr/lib/ruby/gems/2.2.0/gems/rack-mini-profiler-0.9.7/lib/patches/db/mysql2.rb:6:in `each'

(Gerhard Schlager) #4

It’s a known issue. There’s a PR waiting to get merged:


Awesome, thanks!

To anyone looking to move these commits over to their local repo: Is it possible to cherry-pick a commit from another git repository? - Stack Overflow

(Jeff Atwood) #6

That PR is merged now thanks to @neil.

(Jeff Wong) #7

Can you clarify what sort of progress is being done to make an easy solution to import within a docker container? You had it fairly well documented in this post:

(Gerhard Schlager) #8

The easy import with Docker will:

  • install all needed dependencies
  • disable the webserver and sidekiq during the import
  • allow you to configure the importer from outside the Docker container
  • allow you to put files like attachments, avatars and smilies into a subfolder of /var/discourse/shared that is accessible to the importer running in the Docker container
  • optionally setup a MySQL server inside the Docker container if you put a database dump of your phpBB3 forum inside the same folder

So, everything will work out of the box without the need to do anything inside the Docker container.
I’ve nearly finished the template for the Docker container. All that’s left is creating a PR and writing the documentation. I hope I’ll find the time for it in the next few weeks.

(Sam Saffron) #9

Note, if installing MySQL in docker don’t use innodb, it will crawl

Install error : Protocol violation with postgresql
(Michael Marner) #10

I noticed this morning that the import script needs to be started using bundle:

 bundle exec ruby phpbb3.rb phpbb3/settings.yml

Otherwise it will complain about not finding gems.

Also, a hint. You can start additional instances of sidekiq to take advantage of additional CPU cores. I thought this would have been automatic, but apparently not

(| full stack virgin) #11

I hope Ning to Discourse has this kind of extensive tutorial as well.

(Adrian D'atri Guiran) #12

Finally started to make progress on this and the importer was running, but it is giving me this warning over and over again:

WARN: gifsicle 1.78 at /usr/bin/gifsicle (< 1.85) does not support removing extension blocks

Not sure how important that is, or if i can just ignore it. But then it just completely crashed after a while, creating users:

  304 / 11671 (  2.6%)  /home/adrian/discourse/script/import_scripts/phpbb3/importers/avatar_importer.rb:27:in `import_avatar': undefined method `persisted?' for nil:NilClass (NoMethodError)
    from /home/adrian/discourse/script/import_scripts/phpbb3/importers/user_importer.rb:40:in `block in map_user'
    from /home/adrian/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/core_ext/object/try.rb:77:in `call'
    from /home/adrian/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/core_ext/object/try.rb:77:in `public_send'
    from /home/adrian/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/core_ext/object/try.rb:77:in `try!'
    from /home/adrian/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/core_ext/object/try.rb:63:in `try'
    from /home/adrian/discourse/script/import_scripts/base.rb:328:in `create_user'
    from /home/adrian/discourse/script/import_scripts/base.rb:240:in `block in create_users'
    from /home/adrian/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rack-mini-profiler-0.9.7/lib/patches/db/mysql2.rb:6:in `each'
    from /home/adrian/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rack-mini-profiler-0.9.7/lib/patches/db/mysql2.rb:6:in `each'
    from /home/adrian/discourse/script/import_scripts/base.rb:228:in `create_users'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importer.rb:61:in `block in import_users'
    from /home/adrian/discourse/script/import_scripts/base.rb:679:in `block in batches'
    from /home/adrian/discourse/script/import_scripts/base.rb:678:in `loop'
    from /home/adrian/discourse/script/import_scripts/base.rb:678:in `batches'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importer.rb:157:in `batches'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importer.rb:55:in `import_users'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importer.rb:28:in `execute'
    from /home/adrian/discourse/script/import_scripts/base.rb:45:in `perform'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importer.rb:20:in `perform'
    from phpbb3.rb:31:in `<module:PhpBB3>'
    from phpbb3.rb:12:in `<module:ImportScripts>'
    from phpbb3.rb:11:in `<main>'

(Adrian D'atri Guiran) #13

Can anyone tell me. since this guide follows a setup on a Development instance of Discourse. The end goal is to export via the discourse backup interface, and then import this into a Discourse Docker install, is this correct?

If this is correct, what exactly does sideqik do? ( bundle exec sidekiq -q default)

Should i really be running this before i have exported and imported into my Docker setup?

(Adrian D'atri Guiran) #14

also crashing on:

 24149 / 84352 ( 28.6%)  [2718433 items/min]  at convert_tree_to_html (/home/adrian/discourse/vendor/assets/javascripts/better_markdown.js:508:23): Object #<Object> has no method 'slice' (PrettyText::JavaScriptError)
    from at convert_tree_to_html (/home/adrian/discourse/vendor/assets/javascripts/better_markdown.js:634:21)
    from at convert_tree_to_html (/home/adrian/discourse/vendor/assets/javascripts/better_markdown.js:634:21)
    from at convert_tree_to_html (/home/adrian/discourse/vendor/assets/javascripts/better_markdown.js:634:21)
    from at convert_tree_to_html (/home/adrian/discourse/vendor/assets/javascripts/better_markdown.js:634:21)
    from at convert_tree_to_html (/home/adrian/discourse/vendor/assets/javascripts/better_markdown.js:634:21)
    from at convert_tree_to_html (/home/adrian/discourse/vendor/assets/javascripts/better_markdown.js:634:21)
    from at toHTMLTree (/home/adrian/discourse/vendor/assets/javascripts/better_markdown.js:432:16)
    from at Discourse.Dialect.cook (/home/adrian/discourse/app/assets/javascripts/discourse/dialects/dialect.js:268:23)
    from at makeHtml (/home/adrian/discourse/app/assets/javascripts/discourse/lib/markdown.js:228:34)
    from at <eval>:1:44
    from /home/adrian/discourse/lib/pretty_text.rb:204:in `block in markdown'
    from /home/adrian/discourse/lib/pretty_text.rb:395:in `block in protect'
    from /home/adrian/discourse/lib/pretty_text.rb:393:in `synchronize'
    from /home/adrian/discourse/lib/pretty_text.rb:393:in `protect'
    from /home/adrian/discourse/lib/pretty_text.rb:176:in `markdown'
    from /home/adrian/discourse/lib/pretty_text.rb:247:in `cook'
    from /home/adrian/discourse/plugins/poll/plugin.rb:136:in `extract'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importers/poll_importer.rb:82:in `extract_default_poll'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importers/poll_importer.rb:23:in `map_poll'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importers/post_importer.rb:75:in `add_poll'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importers/post_importer.rb:55:in `map_first_post'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importers/post_importer.rb:35:in `map_post'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importer.rb:106:in `block (2 levels) in import_posts'
    from /home/adrian/discourse/script/import_scripts/base.rb:415:in `block in create_posts'
    from /home/adrian/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rack-mini-profiler-0.9.7/lib/patches/db/mysql2.rb:6:in `each'
    from /home/adrian/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rack-mini-profiler-0.9.7/lib/patches/db/mysql2.rb:6:in `each'
    from /home/adrian/discourse/script/import_scripts/base.rb:414:in `create_posts'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importer.rb:105:in `block in import_posts'
    from /home/adrian/discourse/script/import_scripts/base.rb:679:in `block in batches'
    from /home/adrian/discourse/script/import_scripts/base.rb:678:in `loop'
    from /home/adrian/discourse/script/import_scripts/base.rb:678:in `batches'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importer.rb:157:in `batches'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importer.rb:99:in `import_posts'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importer.rb:31:in `execute'
    from /home/adrian/discourse/script/import_scripts/base.rb:45:in `perform'
    from /home/adrian/discourse/script/import_scripts/phpbb3/importer.rb:20:in `perform'
    from phpbb3.rb:31:in `<module:PhpBB3>'
    from phpbb3.rb:12:in `<module:ImportScripts>'
    from phpbb3.rb:11:in `<main>'

OK, found the source of this crash, it was because my poll options had hashtags in the text. I think this was making the markdown to tree stuff not work properly. Maybe hastags need to be escaped, or stripped before converting to markdown?

Example of breaking data:

- #1
- #2
- #3
- #4
- #5
- #6
- #7
- #8
- #9

Unable to create poll when the last poll option starts with hashtag
(Gerhard Schlager) #15

It’s running lots of jobs in the background. For example, it downloads images, creates thumbnails and oneboxes and much more.

I guess it would be alright if you just create a backup, import it into the Discourse docker container and do a rebake of all the posts.

(Adrian D'atri Guiran) #16

I just want to be sure it doesn’t send out any notification emails to my userbase before i have the site actually live. Also, can you elaborate on what you mean by “rebake” ?

(Jeff Atwood) #17

Then enable the “disable all email” site setting…

(Gerhard Schlager) #18

Rebaking creates all the sidekiq jobs. Take a look at the following post for instructions:

(Adrian D'atri Guiran) #19

Awesome! thanks guys! i can smell the victory, it’s getting closer. I’m SO EXCITED to finally kill phpbb!!!

(Adrian D'atri Guiran) #22

Ooooof. I just realized a big mistake i made. I forgot about some of my custom bbcodes, and the forum posts are literally littered with these codes. Is there any way i can retroactively modify these BBCodes. Perhaps re-define them in the discourse environment? They are all for soundcloud.


I really like how discourse just handles these links by default, so it would be best if i could just strip all these tags out, and leave the url’s inside them, and let discourse do it’s magic. Any ideas on how to do this, without re-doing the entire import?