การ migrate จาก vBulletin มาเป็น Discourse

หลังจากทำการ install Discourse เรียบร้อย ตามตำราที่เขียนไว้ก่อนหน้า ก็ถึงขั้นตอนหัวฟู คือการย้ายบอร์ด ระดับแสนโพสต์ จาก vBulletin มาลงบน Discourse

ลงเสร็จ สร้าง admin user คนแรกขึ้นมาก่อนนะครับ ค่อยทำการย้ายข้อมูลมา

ssh เข้าไปสู่ vm ที่ลง discourse ไว้

[code]# ลง screen เพราะเวลา import ข้อมูลมันนานมาก ควรทำใน screen session
apt-get install -y screen
screen

เข้าสู่ docker container ที่ลง discourse ไว้

cd /var/discourse
./launcher enter app

ลง package ที่ต้องใข้ในการ import เพิ่ม

apt-get install libmysqlclient-dev mc -y
gem install mysql2

แปลงร่างเป็น user discourse ก่อน

su - discourse

ไป path ของ discourse import script

$ cd /var/www/discourse/script/import_scripts

.

แก้ไข vbulletin.rb script โดยแก้ไขช่วงบนๆ ที่เกี่ยวกับ MySQL

พอแก้เสร็จ ผมจะ cp vbulletin.rb ไปเก็บที่ปลอดภัย

เพราะหากมีปัญหา ถ้าต้อง reinstall docker container ใหม่ทั้งหมด

ไฟล์นี้จะกลายเป็นไฟล์ต้นฉบับ ที่แก้ไว้จะหายไป

path ที่เอาไปเก็บได้ คือ /shared ครับ

$ cp vbulletin.rb /shared/

.

พร้อมแล้ว ก็เริ่มโลด … จับเวลาด้วย

$ time RAILS_ENV=production ruby vbulletin.rb date
[/code]

เสร็จแล้วไปนอนได้งีบนึงครับ ออกจาก screen ด้วยการกด Ctrl-A-D

… รอ
… รอ

พอตื่นมา ก็ลองพิมพ์ screen -r เพื่อกลับเข้าไป screen session ที่กำลัง import อยู่ ดูว่าเสร็จหรือยัง เรียบร้อยไหม ถ้ายังไม่เสร็จ ก็ออกจาก screen แล้วก็รออีก…

เมื่อการ import เรียบร้อย ก็เข้าเว็บไปดูผลงาน จากนั้นก็ แก้ไข permission ของฟอรั่มต่างๆ ตามสมควร ซึ่งคงไม่ยากเกินความสามารถทุกท่านละครับ

ในส่วนไฟล์ vbulletin.rb นั้น นอกจากตัว MySQL connection ของบอร์ด vBulletin เดิมแล้ว ผมมีแก้จาก default script จุดที่สำคัญคือ BATCH_SIZE ผมลดขนาดลงจากเดิมคราวละ 1000 รายการ เหลือ 250 รายการ เพราะ vm ปลายทางนี่ใช้ CloudNode ตัวเล็ก ถ้าใครใช้ dedicated ใหญ่ๆ ก็ลุยโลดครับ และอีกจุด หากมีการ import ซ้ำ จะเจอ Duplicate key name ‘firstpostid_index’ (Mysql2::Error) ก็ใส่ comment เข้าไปตรงบรรทัดนี้

Happy Importing ครับ

2 Likes