Migrare un forum vBulletin 4 a Discourse

Nessun budget per questo. Ma. Forse.

2 Mi Piace

Qualcuno ha riscontrato questo problema durante l’esecuzione dello script di importazione?

Elaborazione post in corso…
37785 / 48843 (77,4%) Terminato*

Il processo è stato interrotto prima del completamento. Quando carico i Forum, sembra che i messaggi importati siano presenti, ma sono preoccupato che l’operazione non si sia conclusa correttamente e che possano esserci problemi.

Avete qualche consiglio? Forse un errore di memoria esaurita? Posso semplicemente rieseguire lo script per riprendere da dove si era interrotto, o tenterà di reimportare dati duplicati? Grazie.

Esegui di nuovo lo script. Non duplicherà i dati.

3 Mi Piace

Grazie, @pfaffman! Ha funzionato alla grande.

4 Mi Piace

Ciao,
innanzitutto grazie per questa guida fantastica. Apprezzo il lavoro che è stato svolto.

Per quanto riguarda il mio problema
Ho difficoltà a connettermi al database quando eseguo lo script di importazione, anche se sto utilizzando MariaDB per ospitare il dump di vBulletin invece di MySQL. Ho verificato che MariaDB sia in esecuzione, sono riuscito a importare il mio dump di vBulletin in esso e ho controllato quattro volte nome utente, hostname e password nello script, ma senza successo.

Sento di star tralasciando qualcosa di semplice; se qualcuno potesse indicarmi la direzione giusta, sarebbe molto utile.

Sto utilizzando le seguenti versioni

mysql2 0.5.2
mariadb-server-10.3
discourse master git commit cb8fa46

Di seguito la descrizione completa

Quando provo a eseguire

apt-get update && apt-get install libmysqlclient-dev mysql-server-5.7

ottengo un errore

E: Il pacchetto 'libmysqlclient-dev' non ha candidati per l'installazione
E: Il pacchetto 'mysql-server-5.7' non ha candidati per l'installazione

il che ha senso, forse quei pacchetti sono stati rimossi dal repository in questo periodo.

Quindi invece eseguo

apt-get update && apt-get install mariadb-server-10.3 libmariadbd-dev

MariaDB funziona come sostituto immediato, il che è bello perché tutti i passaggi funzionano fino a quando provo a eseguire lo script di migrazione, momento in cui ottengo l’errore

root@discourse:/src# su discourse -c 'bundle exec ruby script/import_scripts/vbulletin.rb'
root:@localhost vuole vb4
Caricamento dei gruppi esistenti...
Caricamento degli utenti esistenti...
Caricamento delle categorie esistenti...
Caricamento dei post esistenti...
Caricamento degli argomenti esistenti...
==================================================
Accesso negato per l'utente 'root'@'localhost'
Impossibile connettersi al database.

Hostname: localhost
Nome utente: root
Password: 
database: vb4

Modifica lo script o imposta queste variabili d'ambiente:

export DB_HOST="localhost"
export DB_NAME="vbulletin"
export DB_PW=""
export DB_USER="root"
export TABLE_PREFIX="vb_"
export ATTACHMENT_DIR '/percorso/della/tua/cartella/allegati'

Uscita.

Per le autorizzazioni

root@discourse:/src# mysql
Benvenuto nel monitor MariaDB. I comandi terminano con ; o \g.
Il tuo ID connessione MariaDB è 59
Versione del server: 10.3.17-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab e altri.

Digita 'help;' o '\h' per ottenere aiuto. Digita '\c' per cancellare l'istruzione di input corrente.

MariaDB [(none)]> show grants;
+------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                      |
+------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA unix_socket WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION                                  |
+------------------------------------------------------------------------------------------------+
2 righe nel set (0.000 sec)

Ho controllato due volte il nome utente e la password molte volte e li ho persino impostati manualmente.

2 Mi Piace

Ho fatto un po’ di indagini in più e ho scoperto che il cambiamento dell’immagine di base da Ubuntu 16.04 a Debian è certamente la causa per cui MySQL non è più disponibile, ma sono ancora perplesso su come far connettere mysql2 a MariaDB.

Qualche tempo fa ho inviato una PR che fa sì che mysql-dep.template.yml utilizzi MariaDB. L’ho utilizzata diverse volte.

Sembra che tu stia cercando di non usare una password? Ti consiglio di utilizzarne una. Lo script presuppone che sia presente una password.

2 Mi Piace

Capito. Proverò a impostare una password e vedrò se funziona. Da quanto ho capito, però, lo script di importazione dovrebbe funzionare comunque con MariaDB. Se è così, continuerò a risolvere il problema. Grazie per il rapido aiuto!

@pfaffman Esatto! Grazie mille. Non appena avrò sistemato il mio forum, potrò inviare una PR per una versione VB3 che ho, nel caso possa essere utile a qualcuno.

Questa è anche la mia istanza di test, quindi non c’è problema a pubblicare i dettagli; verrà smantellata presto :slight_smile:

3 Mi Piace

Grazie a tutti per l’aiuto, la migrazione è andata per lo più bene. Ci sono state un paio di allegati mancanti qui e là, ma nel complesso è andata benissimo.

Per chi legge in futuro: ho migrato da Vb3.8.7.

Ho dovuto apportare alcune modifiche alla query SQL in vbulletin.rb, poiché la struttura del mio database non corrispondeva esattamente allo script, ma era molto simile. Ho deciso di rinunciare alle didascalie personalizzate per far procedere le cose.

Diff su Github: File fix other by canyon289 · Pull Request #1 · canyon289/discourse · GitHub

Per l’installazione di MariaDB che sostituisce MySQL ho usato il seguente comando:

apt-get update && apt-get install mariadb-server-10.3 libmariadbd-dev

E per cambiare la password di MariaDB da null a un valore, questo link è stato il più completo:

Ancora una volta, non posso ringraziare abbastanza le persone in questa discussione e tutti i contributori di Discourse per il codice e l’aiuto!

5 Mi Piace

Ho appena completato una migrazione, che ha assegnato a tutti i 2.000+ argomenti una categoria ereditata dall’istanza vBulletin 4. Non mi permette di eliminare questa categoria e reimpostare tutti questi post migrati su nessuna categoria selezionata. “Impossibile eliminare questa categoria perché contiene 2322 argomenti”

Esiste una soluzione alternativa?

Riesegui la migrazione o modifica la categoria di quei topic. Con un numero così elevato, dovrai farlo dalla riga di comando di Ruby.

1 Mi Piace

Ciao,

Non sono sicuro del contesto di questo.

Copia gli allegati nella tua istanza di Discourse (per il percorso controlla le impostazioni di VB4).

Qualcuno può aiutarmi, per favore?

Ciao,

Ho notato che esiste uno script per vBulletin 5, ma non riesco a trovare alcun feedback al riguardo. Le informazioni contenute in questo argomento si applicano anche a quello?

Grazie!

1 Mi Piace

Lo script dovrebbe funzionare in modo molto simile.

1 Mi Piace

Sto eseguendo un’importazione per un’installazione di vB4, ma fallisce durante l’importazione delle categorie figlie. Abbiate pazienza, sono un principiante in Rails/Ruby.

    Traceback (most recent call last):
        20: from script/import_scripts/vbulletin.rb:943:in `<main>'
        19: from /home/vagrant/discourse/script/import_scripts/base.rb:47:in `perform'
        18: from script/import_scripts/vbulletin.rb:84:in `execute'
        17: from script/import_scripts/vbulletin.rb:293:in `import_categories'
        16: from /home/vagrant/discourse/script/import_scripts/base.rb:403:in `create_categories'
        15: from /home/vagrant/discourse/script/import_scripts/base.rb:403:in `each'
        14: from /home/vagrant/discourse/script/import_scripts/base.rb:422:in `block in create_categories'
        13: from /home/vagrant/discourse/script/import_scripts/base.rb:454:in `create_category'
        12: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/suppressor.rb:48:in `save!'
        11: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/transactions.rb:319:in `save!'
        10: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/transactions.rb:366:in `with_transaction_returning_status'
         9: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/transactions.rb:212:in `transaction'
         8: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:281:in `transaction'
         7: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract/transaction.rb:278:in `within_new_transaction'
         6: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
         5: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract/transaction.rb:280:in `block in within_new_transaction'
         4: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:281:in `block in transaction'
         3: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/transactions.rb:375:in `block in with_transaction_returning_status'
         2: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/transactions.rb:319:in `block in save!'
         1: from /home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/validations.rb:53:in `save!'
/home/vagrant/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.1/lib/active_record/validations.rb:81:in `raise_validation_error': Validation failed: Slug is invalid (ActiveRecord::RecordInvalid)

Ho aggiunto qualche output di debug per risolvere il problema. Il valore di slug nella Categoria è nil.

La categoria sembra essere valida quando itera attraverso create_categories(children_categories) do |category|. Ho anche registrato opts, import_id e new_category (immediatamente prima di .save!) da def create_category in base.rb. Tutto sembra valido secondo quanto si aspettano le funzioni.

Qualcuno ha mai incontrato questo problema prima?

       37 / 53 ( 69.8%)  [345139 items/min]
category:
{"forumid"=>355, "title"=>"News", "description"=>"RSS Feed", "displayorder"=>6, "parentid"=>205}

Entering create_category...
opts:
{:id=>355, :name=>"News", :position=>6, :description=>"RSS Feed", :parent_category_id=>6}
import_id:
355

new_category:
#<Category id: nil, name: "News", color: "BF1E2E", topic_id: nil, topic_count: 0, created_at: nil, updated_at: nil, user_id: -1, topics_year: 0, topics_month: 0, topics_week: 0, slug: nil, description: nil, text_color: "FFF", read_restricted: false, auto_close_hours: nil, post_count: 0, latest_post_id: nil, latest_topic_id: nil, position: 6, parent_category_id: 6, posts_year: 0, posts_month: 0, posts_week: 0, email_in: nil, email_in_allow_strangers: false, topics_day: 0, posts_day: 0, allow_badges: true, name_lower: nil, auto_close_based_on_last_post: false, topic_template: nil, contains_messages: nil, sort_order: nil, sort_ascending: nil, uploaded_logo_id: nil, uploaded_background_id: nil, topic_featured_link_allowed: true, all_topics_wiki: false, show_subcategory_list: false, num_featured_topics: 3, default_view: nil, subcategory_list_style: "rows_with_featured_topics", default_top_period: "all", mailinglist_mirror: false, minimum_required_tags: 0, navigate_to_first_post_after_read: false, search_priority: 0, allow_global_tags: false, reviewable_by_group_id: nil, required_tag_group_id: nil, min_tags_from_required_group: 1>
    Traceback (most recent call last):
2 Mi Piace

Il nostro sviluppatore ha provato lo script, ma non è riuscito ad andare molto avanti. C’è qualcuno interessato a farlo per noi in qualità di consulente?

2 Mi Piace

Certo, inviami un messaggio privato.

2 Mi Piace

Scusa la mia ignoranza, ma come si invia un messaggio privato? Non mi è sembrato così ovvio. Oppure puoi scrivermi direttamente all’indirizzo abboud at cedrus dot com.

Domanda sull’importazione: alcuni post nel nostro forum basato su vBulletin contengono link ad altri post nello stesso forum. Questi link vengono convertiti durante l’importazione? Se non è così, cosa succede a questi link? Vengono rimossi?

1 Mi Piace

Non riesco a ricordare se la versione corrente li riscriva. Lo script che ho (che intendo sottoporre come PR) li corregge.

2 Mi Piace