Spostare argomenti da un'istanza Discourse a un'altra

Devi spostare alcune cose da un’istanza di Discourse a un’altra?

Esiste uno strumento da riga di comando per esportare un argomento, un insieme di argomenti o un’intera categoria, e un altro per importarli nell’altra estremità.

Esportazione/Importazione di Argomenti

  • uno o più argomenti e le relative risposte
  • gli utenti che hanno pubblicato nell’argomento

Esportazione/Importazione di Categorie

  • la categoria e tutte le sue sottocategorie
  • le sue impostazioni di sicurezza
  • i gruppi personalizzati menzionati nelle impostazioni di sicurezza
    • :warning: se uno qualsiasi dei gruppi ha abilitate le “richieste di iscrizione”, si bloccherà. Disattiva questa opzione prima dell’esportazione
  • tutti gli argomenti e i post nella categoria e nelle sottocategorie
  • tutti gli utenti che hanno pubblicato, e li assegna ai gruppi

Inizio: Identificare gli ID

Innanzitutto, identifica l’ID (o gli ID) di =Export= che desideri esportare. Lo troverai alla fine dell’URL utilizzato per accedervi.

  • https://meta.discourse.org/t/how-to-contribute-to-discourse/53797

  • https://meta.discourse.org/t/how-to-contribute-to-discourse/53797/12
    (in questo caso sei nel mezzo di un argomento - prendi il primo numero)

  • https://meta.discourse.org/c/howto/faq/4

ID della Categoria o dell’Argomento

Argomenti Multipli

Puoi selezionare più di un argomento aggiungendo ID separati da uno spazio; questo funziona nel campo sopra (non credo funzioni per le categorie):

  • 53797 200943 124096

Esegui lo Script di Esportazione

Lo strumento può essere eseguito come utente root all’interno del container:

cd /var/discourse
./launcher enter app

Esegui questo comando:

discourse export_=Export= =ID=

L’output dovrebbe essere simile a questo:

Avvio dell’esportazione di =Export=…

Dove stanno arrivando tutti i nuovi utenti?
Esportazione salvata in =Export=-export-2021-08-27-015437.json

Fatto

Sposta il File Esportato

Il file .json esportato deve essere spostato dall’interno del container dell’applicazione dove hai eseguito l’esportazione all’interno del container dell’istanza ricevente. Questo richiede alcuni passaggi.

Copialo all’“esterno”

Esci dal container se non l’hai già fatto

exit

Dovresti ora avere un prompt simile a questo:

root@yourserver:/var/discourse

Usa docker per copiare il file fuori dal container (non credo tu possa spostarlo)

docker cp app:/var/www/discourse/=FileName= .

Spostalo sull’altra istanza

Questo è al di fuori dello scopo di questa guida, ma questo potrebbe aiutarti a raggiungerlo:

Copialo nel container nell’istanza ricevente

Effettua l’accesso SSH alla tua istanza ricevente come root e vai alla directory Discourse:

cd /var/discourse

Usa docker ancora una volta per copiare il file nell’altro container

docker cp =FileName= app:/var/www/discourse

Importa il Contenuto

Entra nel container nell’istanza ricevente:

./launcher enter app

Esegui lo script di importazione

discourse import_=Export= =FileName=

:cake: Fatto!

Potrebbe essere necessario sistemare alcune cose, ma si spera che sia tutto fatto.

Suggerimenti Avanzati

Gem Ruby Mancante

Durante l’importazione di una categoria complessa, alla mia istanza mancava la Ruby ‘Listen’.
Questo è stato risolto facendo questo: (usando l’utente Discourse all’interno del container)

./launcher enter app
su discourse
bundle config --delete without
bundle config --delete with
bundle install
exit
exit

Questo ha rotto la console rails, rendendo necessaria una successiva ricostruzione

./launcher rebuild app

Multisito

In un ambiente multisito, usa la variabile d’ambiente RAILS_DB.

RAILS_DB=xxxmoves discourse export_=Export= =ID=
RAILS_DB=dancerehab discourse import_=Export= =FileName=

Segnala i bug nella categoria bug e richiedi miglioramenti nella categoria #feature.


Argomenti Correlati


Ultima Revisione da @SaraDev il 2022-07-13T00:00:00Z

44 Mi Piace
UI: Topic and Category Export/Import
CLI command to migrate a single category
Moving topics between sites?
Category/Topic export fails with error "database "discourse_development" does not exist"
Easiest way to export a single topic?
Saving a Conversation
Migrate user custom fields to another instance
How to export user data from a category on a hosted site
Error Importing Categories from a Discourse Instance to Another
Import CSV User Activity from one Discourse to Another
How use API to convert topic in discourse1.com to discourse2.com
Can sub-forums of the same instance split up and move to new independent servers (or discourse instances)?
Help migrating category from one instance to another without admin on the source instance
Adding default sets of topics, categories and users to a new Discourse
How to download Comments and Topics
Downloading Content
Can we combine 2 separate discourse sites?
Tracking and resolving a schema drift cause
Merge two Discourse forums into one
Moving topics from a forum on one website to a forum on another website
Transfer topics between forums?
Forum Aquisition
Transfering inbox group messages to another instance?
Transfering inbox group messages to another instance?
Imported categories are not in parent category
I wonder how to add hundreds of users into a group? Is there any api?
Selective backups skipping settings and config
Test driving admin/moderation features
Add backup to existing Discourse instance
Merging two Discourse forums
Migrating vBulletin onto existing and live Discourse instance
Migrate topics from one discourse instance to another?
A system where people have to start at lesson 1, and cannot see the other lessons?
How to divide my community into 2 parts

Ci riprovo.

C’è un modo semplice per migrare i caricamenti pertinenti insieme agli argomenti?

Non proprio. Una cosa che funziona per lo più è se prendi tutti quei caricamenti e incolli l’URL dell’originale in qualsiasi post sul sito a cui ti stai spostando, quindi quello che dovrebbe succedere è che quei caricamenti verranno creati con lo stesso SHA e Funziona e basta.

Quindi faresti la cosa che converte le cose nel post nell’URL per ottenere quegli URL. (Non riesco mai a ricordare come si fa, quindi devo scoprirlo ogni volta).

Hmmm - rimango un po’ confuso da questo. Stai dicendo che questo funzionerà?

  1. Prendi tutti i file di caricamento dal primo sito
    • come?
  2. Inseriscili in un singolo argomento
  3. Genereranno lo stesso link relativo che avevano nel vecchio sito e magia!

Oppure intendevi questo?

  1. Prendi tutti gli URL assoluti nelle tue categorie di interesse dal vecchio sito
  2. Incollali in un argomento
  3. Verranno tutti scaricati nel nuovo sito con lo stesso SHA e i link esistenti funzioneranno magicamente

O qualcos’altro interamente?

Penso che uno dei due dovrebbe funzionare. Tuttavia, puoi caricare quelle immagini sul nuovo sito, dovrebbero generare lo stesso sha, così i link esistenti negli argomenti funzioneranno magicamente.

Forse potresti fare qualcosa del genere

cat_id=123
Topic.where(category_id: cat_id).each do| t|
  Post.where(topic_id: t.id) do |p|
      p.cooked.match(image url)....
         puts(the match) 

E penso che se fai questo e incolli quei link in un post ovunque sul tuo sito, scaricherà tutte quelle immagini localmente e creerà lo stesso sha, quindi quegli stessi link. Puoi provarne un paio manualmente per vedere.

È nel cuore della notte. La tua esperienza potrebbe variare.

1 Mi Piace

Ciao, non sono sicuro che questo tutorial sia quello che voglio fare, ma sollevo la domanda qui.

Se installo Discourse su un server, ma a causa della crescita ho bisogno di migrare su uno più potente, questi sono i passaggi?

Cosa succede, ad esempio, con l’opzione di backup? Non posso farlo, installare Discourse su un altro server e poi ripristinare la copia di backup dell’altra istanza da quell’opzione?

Attendo un tuo chiarimento, poiché voglio sapere come migrare quando ne avrò bisogno e non perdere il lavoro che ho svolto di recente.

No. Per spostare un sito su un server più grande è sufficiente un semplice backup e ripristino. Puoi anche Spostare un sito Discourse su un altro VPS con rsync