Migrate a vBulletin 4 forum to Discourse

No worries Jay, I’m just thankful I have someone here to hold my hand a bit :smiley:

The only thing that worries me is that I make a change such that none of the attachments are uploaded, but all marked as completed in the migration so I have to do it all over again.

Do you happen to know specifically what the short_url property is used for in Discourse? Is it something I can change to my own liking, or does it have to be matching the object for the binding of posts and attachment step later on?


short_url is a function in the Upload model. If it doesn’t work, it’s because there isn’t an Upload. I guess I would next look at that upload is coming back from find_upload. Maybe it’s not really finding it.


Here is the output

I changed identifying data (Filename and S3 bucket URL)

#418 works, #419 does not work, apart from different property data, it seems fine no?

Filename in 419 uses a underscore and 418 does not, but there are other filenames previously that uses underscore in its filename just fine.
Other filenames are also much longer than the one that fail, so I don’t think it has anything to do with the filename.


The above post was erroneous, @pfaffman was correct in his assumptions.

Due to my own added logic, the script crashed on my own code, as such the last item shown was the last successful item.

The problem item had every property set as nil except the filename.

A simple check if the sha1 property was nil fixed the issue.

Huge thanks to @pfaffman <3


The story of my life!


Sorry to bother you again pfaffman, but is this normal?

3679343 / 3550728 (103.6%)

It seems during attachment upload it has gone over 100%?

1 Like

It means that the query that gets the total number of attachments and the one that gets the attachments are different. It probably means that the number of attachments is wrong. Unless it goes on forever, in which case, something is wrong. :wink:

1 Like

Attempted @Jack51 s Excelent recap for the steps involved.

However (attempting this on a digitalocean environment) the step for mariadb fails… following those instructions (with 10.5 instead of 10.3) the mysql service is unknown after install.

likely has something to do with that apt-utils wasn’t installed maybe… but also throws
invoke-rc.d: policy-rc.d denied execution of restart.

not sure how to proceed

edit: rebuilt the discourse, made sure to install apt-utils first… still get the same error… can’t start the mariadb server

# apt-get update && apt-get install mariadb-server mariadb-client libmariadbd-dev
Hit:1 http://deb.debian.org/debian bullseye InRelease
Hit:2 http://deb.debian.org/debian bullseye-updates InRelease                                                                                                            
Hit:3 http://deb.debian.org/debian bullseye-backports InRelease                                                                                                          
Hit:4 http://security.debian.org/debian-security bullseye-security InRelease                                                                                             
Hit:5 https://dl.yarnpkg.com/debian stable InRelease                                                                                                                     
Hit:6 http://apt.postgresql.org/pub/repos/apt bullseye-pgdg InRelease                                                                                  
Hit:7 https://deb.nodesource.com/node_16.x bullseye InRelease
Reading package lists... Done
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  galera-4 iproute2 libaio1 libatm1 libbpf0 libcgi-fast-perl libcgi-pm-perl libclone-perl libconfig-inifiles-perl libdbd-mariadb-perl libdbi-perl libelf1
  libencode-locale-perl libfcgi-bin libfcgi-perl libfcgi0ldbl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl libhttp-message-perl
  libio-html-perl liblwp-mediatypes-perl libmariadb-dev libmariadb3 libmariadbd19 libmnl0 libsnappy1v5 libterm-readkey-perl libtimedate-perl liburi-perl libxtables12
  lsof mariadb-client-10.5 mariadb-client-core-10.5 mariadb-common mariadb-server-10.5 mariadb-server-core-10.5 mysql-common
Suggested packages:
  iproute2-doc libmldbm-perl libnet-daemon-perl libsql-statement-perl libdata-dump-perl libipc-sharedcache-perl libwww-perl mailx mariadb-test netcat-openbsd
The following NEW packages will be installed:
  galera-4 iproute2 libaio1 libatm1 libbpf0 libcgi-fast-perl libcgi-pm-perl libclone-perl libconfig-inifiles-perl libdbd-mariadb-perl libdbi-perl libelf1
  libencode-locale-perl libfcgi-bin libfcgi-perl libfcgi0ldbl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl libhttp-message-perl
  libio-html-perl liblwp-mediatypes-perl libmariadb-dev libmariadb3 libmariadbd-dev libmariadbd19 libmnl0 libsnappy1v5 libterm-readkey-perl libtimedate-perl liburi-perl
  libxtables12 lsof mariadb-client mariadb-client-10.5 mariadb-client-core-10.5 mariadb-common mariadb-server mariadb-server-10.5 mariadb-server-core-10.5 mysql-common
0 upgraded, 42 newly installed, 0 to remove and 0 not upgraded.
Need to get 28.9 MB of archives.
After this operation, 227 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://deb.debian.org/debian bullseye/main amd64 mysql-common all 5.8+1.0.7 [7,464 B]
Get:2 http://deb.debian.org/debian bullseye/main amd64 mariadb-common all 1:10.5.15-0+deb11u1 [36.7 kB]
Get:3 http://deb.debian.org/debian bullseye/main amd64 galera-4 amd64 26.4.11-0+deb11u1 [804 kB]
Get:4 http://deb.debian.org/debian bullseye/main amd64 libelf1 amd64 0.183-1 [165 kB]
Get:5 http://deb.debian.org/debian bullseye/main amd64 libbpf0 amd64 1:0.3-2 [98.3 kB]
Get:6 http://deb.debian.org/debian bullseye/main amd64 libmnl0 amd64 1.0.4-3 [12.5 kB]
Get:7 http://deb.debian.org/debian bullseye/main amd64 libxtables12 amd64 1.8.7-1 [45.1 kB]
Get:8 http://deb.debian.org/debian bullseye/main amd64 iproute2 amd64 5.10.0-4 [930 kB]
Get:9 http://deb.debian.org/debian bullseye/main amd64 libdbi-perl amd64 1.643-3+b1 [780 kB]
Get:10 http://deb.debian.org/debian bullseye/main amd64 lsof amd64 4.93.2+dfsg-1.1 [319 kB]
Get:11 http://deb.debian.org/debian bullseye/main amd64 libconfig-inifiles-perl all 3.000003-1 [52.1 kB]
Get:12 http://deb.debian.org/debian bullseye/main amd64 libmariadb3 amd64 1:10.5.15-0+deb11u1 [176 kB]
Get:13 http://deb.debian.org/debian bullseye/main amd64 mariadb-client-core-10.5 amd64 1:10.5.15-0+deb11u1 [783 kB]
Get:14 http://deb.debian.org/debian bullseye/main amd64 mariadb-client-10.5 amd64 1:10.5.15-0+deb11u1 [1,509 kB]
Get:15 http://deb.debian.org/debian bullseye/main amd64 libaio1 amd64 0.3.112-9 [12.5 kB]
Get:16 http://deb.debian.org/debian bullseye/main amd64 libsnappy1v5 amd64 1.1.8-1 [17.9 kB]
Get:17 http://deb.debian.org/debian bullseye/main amd64 mariadb-server-core-10.5 amd64 1:10.5.15-0+deb11u1 [6,689 kB]
Get:18 http://deb.debian.org/debian bullseye/main amd64 mariadb-server-10.5 amd64 1:10.5.15-0+deb11u1 [4,260 kB]
Get:19 http://deb.debian.org/debian bullseye/main amd64 libatm1 amd64 1:2.5.1-4 [71.3 kB]
Get:20 http://deb.debian.org/debian bullseye/main amd64 libhtml-tagset-perl all 3.20-4 [13.0 kB]
Get:21 http://deb.debian.org/debian bullseye/main amd64 liburi-perl all 5.08-1 [90.6 kB]
Get:22 http://deb.debian.org/debian bullseye/main amd64 libhtml-parser-perl amd64 3.75-1+b1 [105 kB]
Get:23 http://deb.debian.org/debian bullseye/main amd64 libcgi-pm-perl all 4.51-1 [224 kB]
Get:24 http://deb.debian.org/debian bullseye/main amd64 libfcgi0ldbl amd64 2.4.2-2 [26.1 kB]
Get:25 http://deb.debian.org/debian bullseye/main amd64 libfcgi-perl amd64 0.79+ds-2 [27.6 kB]
Get:26 http://deb.debian.org/debian bullseye/main amd64 libcgi-fast-perl all 1:2.15-1 [12.1 kB]
Get:27 http://deb.debian.org/debian bullseye/main amd64 libclone-perl amd64 0.45-1+b1 [15.4 kB]
Get:28 http://deb.debian.org/debian bullseye/main amd64 libdbd-mariadb-perl amd64 1.21-3 [110 kB]
Get:29 http://deb.debian.org/debian bullseye/main amd64 libencode-locale-perl all 1.05-1.1 [13.2 kB]
Get:30 http://deb.debian.org/debian bullseye/main amd64 libfcgi-bin amd64 2.4.2-2 [12.9 kB]
Get:31 http://deb.debian.org/debian bullseye/main amd64 libhtml-template-perl all 2.97-1.1 [66.2 kB]
Get:32 http://deb.debian.org/debian bullseye/main amd64 libtimedate-perl all 2.3300-2 [39.3 kB]
Get:33 http://deb.debian.org/debian bullseye/main amd64 libhttp-date-perl all 6.05-1 [10.4 kB]
Get:34 http://deb.debian.org/debian bullseye/main amd64 libio-html-perl all 1.004-2 [16.1 kB]
Get:35 http://deb.debian.org/debian bullseye/main amd64 liblwp-mediatypes-perl all 6.04-1 [19.9 kB]
Get:36 http://deb.debian.org/debian bullseye/main amd64 libhttp-message-perl all 6.28-1 [79.6 kB]
Get:37 http://deb.debian.org/debian bullseye/main amd64 libmariadb-dev amd64 1:10.5.15-0+deb11u1 [185 kB]
Get:38 http://deb.debian.org/debian bullseye/main amd64 libmariadbd19 amd64 1:10.5.15-0+deb11u1 [4,917 kB]
Get:39 http://deb.debian.org/debian bullseye/main amd64 libmariadbd-dev amd64 1:10.5.15-0+deb11u1 [6,085 kB]
Get:40 http://deb.debian.org/debian bullseye/main amd64 libterm-readkey-perl amd64 2.38-1+b2 [27.8 kB]
Get:41 http://deb.debian.org/debian bullseye/main amd64 mariadb-client all 1:10.5.15-0+deb11u1 [35.2 kB]
Get:42 http://deb.debian.org/debian bullseye/main amd64 mariadb-server all 1:10.5.15-0+deb11u1 [35.3 kB]
Fetched 28.9 MB in 0s (124 MB/s)             
Extracting templates from packages: 100%
Preconfiguring packages ...
Selecting previously unselected package mysql-common.
(Reading database ... 38903 files and directories currently installed.)
Preparing to unpack .../00-mysql-common_5.8+1.0.7_all.deb ...
Unpacking mysql-common (5.8+1.0.7) ...
Selecting previously unselected package mariadb-common.
Preparing to unpack .../01-mariadb-common_1%3a10.5.15-0+deb11u1_all.deb ...
Unpacking mariadb-common (1:10.5.15-0+deb11u1) ...
Selecting previously unselected package galera-4.
Preparing to unpack .../02-galera-4_26.4.11-0+deb11u1_amd64.deb ...
Unpacking galera-4 (26.4.11-0+deb11u1) ...
Selecting previously unselected package libelf1:amd64.
Preparing to unpack .../03-libelf1_0.183-1_amd64.deb ...
Unpacking libelf1:amd64 (0.183-1) ...
Selecting previously unselected package libbpf0:amd64.
Preparing to unpack .../04-libbpf0_1%3a0.3-2_amd64.deb ...
Unpacking libbpf0:amd64 (1:0.3-2) ...
Selecting previously unselected package libmnl0:amd64.
Preparing to unpack .../05-libmnl0_1.0.4-3_amd64.deb ...
Unpacking libmnl0:amd64 (1.0.4-3) ...
Selecting previously unselected package libxtables12:amd64.
Preparing to unpack .../06-libxtables12_1.8.7-1_amd64.deb ...
Unpacking libxtables12:amd64 (1.8.7-1) ...
Selecting previously unselected package iproute2.
Preparing to unpack .../07-iproute2_5.10.0-4_amd64.deb ...
Unpacking iproute2 (5.10.0-4) ...
Selecting previously unselected package libdbi-perl:amd64.
Preparing to unpack .../08-libdbi-perl_1.643-3+b1_amd64.deb ...
Unpacking libdbi-perl:amd64 (1.643-3+b1) ...
Selecting previously unselected package lsof.
Preparing to unpack .../09-lsof_4.93.2+dfsg-1.1_amd64.deb ...
Unpacking lsof (4.93.2+dfsg-1.1) ...
Selecting previously unselected package libconfig-inifiles-perl.
Preparing to unpack .../10-libconfig-inifiles-perl_3.000003-1_all.deb ...
Unpacking libconfig-inifiles-perl (3.000003-1) ...
Selecting previously unselected package libmariadb3:amd64.
Preparing to unpack .../11-libmariadb3_1%3a10.5.15-0+deb11u1_amd64.deb ...
Unpacking libmariadb3:amd64 (1:10.5.15-0+deb11u1) ...
Selecting previously unselected package mariadb-client-core-10.5.
Preparing to unpack .../12-mariadb-client-core-10.5_1%3a10.5.15-0+deb11u1_amd64.deb ...
Unpacking mariadb-client-core-10.5 (1:10.5.15-0+deb11u1) ...
Selecting previously unselected package mariadb-client-10.5.
Preparing to unpack .../13-mariadb-client-10.5_1%3a10.5.15-0+deb11u1_amd64.deb ...
Unpacking mariadb-client-10.5 (1:10.5.15-0+deb11u1) ...
Selecting previously unselected package libaio1:amd64.
Preparing to unpack .../14-libaio1_0.3.112-9_amd64.deb ...
Unpacking libaio1:amd64 (0.3.112-9) ...
Selecting previously unselected package libsnappy1v5:amd64.
Preparing to unpack .../15-libsnappy1v5_1.1.8-1_amd64.deb ...
Unpacking libsnappy1v5:amd64 (1.1.8-1) ...
Selecting previously unselected package mariadb-server-core-10.5.
Preparing to unpack .../16-mariadb-server-core-10.5_1%3a10.5.15-0+deb11u1_amd64.deb ...
Unpacking mariadb-server-core-10.5 (1:10.5.15-0+deb11u1) ...
Setting up mysql-common (5.8+1.0.7) ...
update-alternatives: using /etc/mysql/my.cnf.fallback to provide /etc/mysql/my.cnf (my.cnf) in auto mode
Setting up mariadb-common (1:10.5.15-0+deb11u1) ...
update-alternatives: using /etc/mysql/mariadb.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode
Selecting previously unselected package mariadb-server-10.5.
(Reading database ... 39534 files and directories currently installed.)
Preparing to unpack .../00-mariadb-server-10.5_1%3a10.5.15-0+deb11u1_amd64.deb ...
Unpacking mariadb-server-10.5 (1:10.5.15-0+deb11u1) ...
Selecting previously unselected package libatm1:amd64.
Preparing to unpack .../01-libatm1_1%3a2.5.1-4_amd64.deb ...
Unpacking libatm1:amd64 (1:2.5.1-4) ...
Selecting previously unselected package libhtml-tagset-perl.
Preparing to unpack .../02-libhtml-tagset-perl_3.20-4_all.deb ...
Unpacking libhtml-tagset-perl (3.20-4) ...
Selecting previously unselected package liburi-perl.
Preparing to unpack .../03-liburi-perl_5.08-1_all.deb ...
Unpacking liburi-perl (5.08-1) ...
Selecting previously unselected package libhtml-parser-perl.
Preparing to unpack .../04-libhtml-parser-perl_3.75-1+b1_amd64.deb ...
Unpacking libhtml-parser-perl (3.75-1+b1) ...
Selecting previously unselected package libcgi-pm-perl.
Preparing to unpack .../05-libcgi-pm-perl_4.51-1_all.deb ...
Unpacking libcgi-pm-perl (4.51-1) ...
Selecting previously unselected package libfcgi0ldbl:amd64.
Preparing to unpack .../06-libfcgi0ldbl_2.4.2-2_amd64.deb ...
Unpacking libfcgi0ldbl:amd64 (2.4.2-2) ...
Selecting previously unselected package libfcgi-perl:amd64.
Preparing to unpack .../07-libfcgi-perl_0.79+ds-2_amd64.deb ...
Unpacking libfcgi-perl:amd64 (0.79+ds-2) ...
Selecting previously unselected package libcgi-fast-perl.
Preparing to unpack .../08-libcgi-fast-perl_1%3a2.15-1_all.deb ...
Unpacking libcgi-fast-perl (1:2.15-1) ...
Selecting previously unselected package libclone-perl.
Preparing to unpack .../09-libclone-perl_0.45-1+b1_amd64.deb ...
Unpacking libclone-perl (0.45-1+b1) ...
Selecting previously unselected package libdbd-mariadb-perl.
Preparing to unpack .../10-libdbd-mariadb-perl_1.21-3_amd64.deb ...
Unpacking libdbd-mariadb-perl (1.21-3) ...
Selecting previously unselected package libencode-locale-perl.
Preparing to unpack .../11-libencode-locale-perl_1.05-1.1_all.deb ...
Unpacking libencode-locale-perl (1.05-1.1) ...
Selecting previously unselected package libfcgi-bin.
Preparing to unpack .../12-libfcgi-bin_2.4.2-2_amd64.deb ...
Unpacking libfcgi-bin (2.4.2-2) ...
Selecting previously unselected package libhtml-template-perl.
Preparing to unpack .../13-libhtml-template-perl_2.97-1.1_all.deb ...
Unpacking libhtml-template-perl (2.97-1.1) ...
Selecting previously unselected package libtimedate-perl.
Preparing to unpack .../14-libtimedate-perl_2.3300-2_all.deb ...
Unpacking libtimedate-perl (2.3300-2) ...
Selecting previously unselected package libhttp-date-perl.
Preparing to unpack .../15-libhttp-date-perl_6.05-1_all.deb ...
Unpacking libhttp-date-perl (6.05-1) ...
Selecting previously unselected package libio-html-perl.
Preparing to unpack .../16-libio-html-perl_1.004-2_all.deb ...
Unpacking libio-html-perl (1.004-2) ...
Selecting previously unselected package liblwp-mediatypes-perl.
Preparing to unpack .../17-liblwp-mediatypes-perl_6.04-1_all.deb ...
Unpacking liblwp-mediatypes-perl (6.04-1) ...
Selecting previously unselected package libhttp-message-perl.
Preparing to unpack .../18-libhttp-message-perl_6.28-1_all.deb ...
Unpacking libhttp-message-perl (6.28-1) ...
Selecting previously unselected package libmariadb-dev.
Preparing to unpack .../19-libmariadb-dev_1%3a10.5.15-0+deb11u1_amd64.deb ...
Unpacking libmariadb-dev (1:10.5.15-0+deb11u1) ...
Selecting previously unselected package libmariadbd19:amd64.
Preparing to unpack .../20-libmariadbd19_1%3a10.5.15-0+deb11u1_amd64.deb ...
Unpacking libmariadbd19:amd64 (1:10.5.15-0+deb11u1) ...
Selecting previously unselected package libmariadbd-dev.
Preparing to unpack .../21-libmariadbd-dev_1%3a10.5.15-0+deb11u1_amd64.deb ...
Unpacking libmariadbd-dev (1:10.5.15-0+deb11u1) ...
Selecting previously unselected package libterm-readkey-perl.
Preparing to unpack .../22-libterm-readkey-perl_2.38-1+b2_amd64.deb ...
Unpacking libterm-readkey-perl (2.38-1+b2) ...
Selecting previously unselected package mariadb-client.
Preparing to unpack .../23-mariadb-client_1%3a10.5.15-0+deb11u1_all.deb ...
Unpacking mariadb-client (1:10.5.15-0+deb11u1) ...
Selecting previously unselected package mariadb-server.
Preparing to unpack .../24-mariadb-server_1%3a10.5.15-0+deb11u1_all.deb ...
Unpacking mariadb-server (1:10.5.15-0+deb11u1) ...
Setting up libconfig-inifiles-perl (3.000003-1) ...
Setting up galera-4 (26.4.11-0+deb11u1) ...
Setting up libfcgi0ldbl:amd64 (2.4.2-2) ...
Setting up libclone-perl (0.45-1+b1) ...
Setting up libhtml-tagset-perl (3.20-4) ...
Setting up liblwp-mediatypes-perl (6.04-1) ...
Setting up libfcgi-bin (2.4.2-2) ...
Setting up libencode-locale-perl (1.05-1.1) ...
Setting up libatm1:amd64 (1:2.5.1-4) ...
Setting up libsnappy1v5:amd64 (1.1.8-1) ...
Setting up libmnl0:amd64 (1.0.4-3) ...
Setting up libio-html-perl (1.004-2) ...
Setting up libmariadb3:amd64 (1:10.5.15-0+deb11u1) ...
Setting up libxtables12:amd64 (1.8.7-1) ...
Setting up lsof (4.93.2+dfsg-1.1) ...
Setting up libmariadb-dev (1:10.5.15-0+deb11u1) ...
Setting up libtimedate-perl (2.3300-2) ...
Setting up libfcgi-perl:amd64 (0.79+ds-2) ...
Setting up libterm-readkey-perl (2.38-1+b2) ...
Setting up libaio1:amd64 (0.3.112-9) ...
Setting up libelf1:amd64 (0.183-1) ...
Setting up liburi-perl (5.08-1) ...
Setting up libdbi-perl:amd64 (1.643-3+b1) ...
Setting up mariadb-server-core-10.5 (1:10.5.15-0+deb11u1) ...
Setting up libhttp-date-perl (6.05-1) ...
Setting up libmariadbd19:amd64 (1:10.5.15-0+deb11u1) ...
Setting up libdbd-mariadb-perl (1.21-3) ...
Setting up mariadb-client-core-10.5 (1:10.5.15-0+deb11u1) ...
Setting up mariadb-client-10.5 (1:10.5.15-0+deb11u1) ...
Setting up libhtml-parser-perl (3.75-1+b1) ...
Setting up libbpf0:amd64 (1:0.3-2) ...
Setting up libhttp-message-perl (6.28-1) ...
Setting up libmariadbd-dev (1:10.5.15-0+deb11u1) ...
Setting up mariadb-client (1:10.5.15-0+deb11u1) ...
Setting up iproute2 (5.10.0-4) ...
Setting up libcgi-pm-perl (4.51-1) ...
Setting up libhtml-template-perl (2.97-1.1) ...
Setting up mariadb-server-10.5 (1:10.5.15-0+deb11u1) ...
invoke-rc.d: could not determine current runlevel
Stopping MariaDB database server: mariadbd.
invoke-rc.d: could not determine current runlevel
Starting MariaDB database server: mariadbd.
Setting up mariadb-server (1:10.5.15-0+deb11u1) ...
Setting up libcgi-fast-perl (1:2.15-1) ...
Processing triggers for libc-bin (2.31-13+deb11u3) ...
root@discourse-one-app:/# service mysql start
mysql: unrecognized service
1 Like

Ok… so I got the import script to run, though I get an error importing users.

Any idea how I can get past this?

root@discourse-one-app:/var/www/discourse# su discourse -c 'bundle exec ruby script/import_scripts/vbulletin.rb'
root:password@localhost wants vbulletin
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...

importing groups...
       16 / 16 (100.0%)  [126440 items/min]   
importing users
Traceback (most recent call last):
        14: from script/import_scripts/vbulletin.rb:999:in `<main>'
        13: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
        12: from script/import_scripts/vbulletin.rb:82:in `execute'
        11: from script/import_scripts/vbulletin.rb:129:in `import_users'
        10: from /var/www/discourse/script/import_scripts/base.rb:907:in `batches'
         9: from /var/www/discourse/script/import_scripts/base.rb:907:in `loop'
         8: from /var/www/discourse/script/import_scripts/base.rb:908:in `block in batches'
         7: from script/import_scripts/vbulletin.rb:152:in `block in import_users'
         6: from /var/www/discourse/script/import_scripts/base.rb:264:in `create_users'
         5: from /var/www/discourse/script/import_scripts/base.rb:264:in `each'
         4: from /var/www/discourse/script/import_scripts/base.rb:265:in `block in create_users'
         3: from script/import_scripts/vbulletin.rb:170:in `block (2 levels) in import_users'
         2: from script/import_scripts/vbulletin.rb:990:in `parse_timestamp'
         1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/tzinfo-2.0.4/lib/tzinfo/timezone.rb:575:in `utc_to_local'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/tzinfo-2.0.4/lib/tzinfo/timestamp.rb:136:in `for': Integer values are not supported (ArgumentError)

Update: Figured out why things were failing.

As TZInfo 2.x is now required by Discourse, the migration script is currently broken as it uses a function that changed from TZInfo 1.2.x and 2.x.

Temporary fixes to get things working:

Fix TZInfo 2.x breaking time zone import
Note: I’m not sure this is a great fix for all situations but for my database that had well formed epoch timestamps for the dates this seems to work well.

Line 990




Script crashes due to last visited being a nil value
Last visited isn’t actually imported from the database. So we add this to what’s being fetched.

Line 131

          SELECT userid
               , username
               , homepage
               , usertitle
               , usergroupid
               , joindate
               , email
               , password
               , salt
            FROM #{TABLE_PREFIX}user
           WHERE userid > #{last_user_id}
        ORDER BY userid
           LIMIT #{BATCH_SIZE}


          SELECT userid
               , username
               , homepage
               , usertitle
               , usergroupid
               , joindate
               , lastvisit
               , email
               , password
               , salt
            FROM #{TABLE_PREFIX}user
           WHERE userid > #{last_user_id}
        ORDER BY userid
           LIMIT #{BATCH_SIZE}

I hit the same issue and couldn’t figure out which file Haddoq was referring to when he said to change line 990.

For anyone else, it’s vbulletin5.rb

1 Like

Was able to get through the “invalid byte sequence in UTF-8” issue when importing posts by adding some error handling to vbulletin5.rb

Here is the code I replaced line 450 with. I don’t know ruby, so this is a bit of a hack.

      raw = raw.gsub(/(\\r)?\\n/, "\n")
        .gsub("\\t", "\t")
    rescue => error
        p error.message
        p raw

When I reran the script, it printed out the offending post to console

I then searched for some unique text from the console and ran the following command in mysql:

select * from vb_text where rawtext LIKE '%and then my fish ate my car keys%'  limit 10;

this gave the nodeid of the offending row, so I used that to update the row which I could feed into a query that patched the errant text.

update vb_text set rawtext='POST FAILED TO MIGRATE (or a corrected version of the post)' where nodeid IN (159079);

Hello! Can you share the code, how you check

if the sha1 property was nil


I have the same isssue, with:
/discourse/app/models/upload.rb:246:in `base62_sha1': undefined method `hex' for nil:NilClass (NoMethodError)

PS //
For those who might have the same problem.
In file discourse\app\models\upload.rb find:
"#{Upload.base62_sha1(sha1)}#{extension.present? ? ".#{extension}" : ""}"
replace with:

    unless sha1.nil?
      "#{Upload.base62_sha1(sha1)}#{extension.present? ? ".#{extension}" : ""}"

Also, I was have:
discourse/vendor/bundle/ruby/2.7.0/gems/activesupport- `at': can't convert nil into an exact number (TypeError)
To fix this:
In discourse\script\import_scripts\vbulletin.rb I find:

        user.suspended_at = parse_timestamp(user["bandate"])
        user.suspended_till = 200.years.from_now

and replace with:

        user.suspended_at = parse_timestamp(user["bandate"].to_i)
        user.suspended_till = 200.years.from_now.to_i
1 Like

I am using Ubuntu 22.04 LTS and want to convert vBulletin to Discourse.

DB_HOST = ""
DB_USER = "root"
DB_PASSWORD = "*******"

when I input RAILS_ENV=production bundle exec ruby script/import_scripts/vbulletin.rb,
this error happens

1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/mini_profiler/profiling_methods.rb:83:in `profile_method'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/mini_profiler/profiling_methods.rb:83:in `alias_method': undefined method `call' for class `Redis::Client' (NameError)
Did you mean?  caller

How Can I fix it?

Are you using a development installation or a standard install? I think you don’t need to add RAILS_ENV=production since you don’t have a production database.

I am using standard install.
Referenced https://www.vultr.com/docs/how-to-install-discourse-on-ubuntu-20-04/.
I can not use Mysql on docker installation. I installed MariaDB on discourse docker image.

root@localhost-app:/var/www/discourse# service mysql start
mysql: unrecognized service

So I made mysql docker image and uploaded my vBulletine database there. mysql docker image ip address is

Thank you.

I worked as follows:
followed Using Docker container

  1. standard install discourse.(discourse/INSTALL-cloud.md at main · discourse/discourse · GitHub)
  2. download mysql docker and upload my vBulletin database to there.
    I checked it using <root@localhost:/opt/discourse# mysql -h -P 3306 --protocol=tcp -u root -p> command.
  3. root@localhost:/opt/discourse#./launcer enter app
  4. apt-get update && apt-get install libmysqlclient-dev mysql-server-5.7 failed.
    so i installed apt-get update && apt-get install libmariadb-dev mariadb-server
  5. I can not run mysql on docker.
root@localhost-app:/var/www/discourse# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/run/mysqld  /mysqld.sock' (2)

There are no mysqld.sock on entire docker directorys. could not find by command.

root@localhost-app:/var/www/discourse# sudo service mysql start
mysql: unrecognized service  
  1. I referenced https://www.baeldung.com/docker-cant-connect-local-mysql and used mysql docker image on “”
gem install mysql2
gem install php_serialize
<gem install mysql2> was not work until libmariadb-dev installed.
  1. run
su discourse -c 'bundle install --no-deployment --without test --without development --path vendor/bundle'

there was error, So I erased gemfile.lock and .bundle file and tried again.
9. After that I tried.

export DB_NAME="vb3" # Change this to the name of VB3 database.
export DB_USER="root"
export DB_PASSWORD="mypassword"
export DB_HOST=""
cd /var/www/discourse
su discourse -c 'bundle exec ruby script/import_scripts/vbulletin.rb'

But script generate error.

1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/mini_profiler/profiling_methods.rb:83:in `profile_method'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/mini_profiler/profiling_methods.rb:83:in `alias_method': undefined method `call' for class `Redis::Client' (NameError)
Did you mean?  caller

How can I fix it?
Thank you.

same issue here, did you solve the problem already? Thanks!

I also got this one, have you managed to get past it?