Utiliza un script de importación que requiere MySQL

With the latest update ver 2.0.0 beta10 I’m now getting more errors with the bbpress import script (still can’t figure out why images are not being pulled over, but instead referring to their old URLs). Error after the importing topics and posts:

importing private messages...
      120 / 120 (100.0%)  [156526 items/min]  /var/www/discourse/vendor/bundle/ruby/2.4.0/gems/mysql2-0.5.1/lib/mysql2/client.rb:131:in `_query': Table 'db.wp_bp_messages_messages' doesn't exist (Mysql2::Error)
	from /var/www/discourse/vendor/bundle/ruby/2.4.0/gems/mysql2-0.5.1/lib/mysql2/client.rb:131:in `block in query'
	from /var/www/discourse/vendor/bundle/ruby/2.4.0/gems/mysql2-0.5.1/lib/mysql2/client.rb:130:in `handle_interrupt'
	from /var/www/discourse/vendor/bundle/ruby/2.4.0/gems/mysql2-0.5.1/lib/mysql2/client.rb:130:in `query'
	from /var/www/discourse/vendor/bundle/ruby/2.4.0/gems/rack-mini-profiler-1.0.0/lib/patches/db/mysql2.rb:22:in `query'
	from script/import_scripts/bbpress.rb:505:in `bbpress_query'
	from script/import_scripts/bbpress.rb:453:in `block in import_private_messages'
	from /var/www/discourse/script/import_scripts/base.rb:870:in `block in batches'
	from /var/www/discourse/script/import_scripts/base.rb:869:in `loop'
	from /var/www/discourse/script/import_scripts/base.rb:869:in `batches'
	from script/import_scripts/bbpress.rb:452:in `import_private_messages'
	from script/import_scripts/bbpress.rb:32:in `execute'
	from /var/www/discourse/script/import_scripts/base.rb:46:in `perform'
	from script/import_scripts/bbpress.rb:510:in `<main>'
1 me gusta

EDIT: After deeper inspection I found that (at least in my setup) the file was called

  - "templates/import/mysql-dep.template.yml"

NOTE that the correct spelling is “dep”, not “dev”.

=================

Hello! Thanks for posting this. I tried but got this error:

cat: templates/import/mysql-dev.template.yml: No such file or directory

I unfortunately don’t know enough about Docker to proceed…What am I doing wrong? Thank you so much. Here is the full output:

root@forum /var/discourse # ./launcher rebuild import
Ensuring launcher is up to date
Fetching origin
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 16 (delta 12), reused 7 (delta 6), pack-reused 0
Unpacking objects: 100% (16/16), done.
From https://github.com/discourse/discourse_docker
   2ad56e6..d032356  master     -> origin/master
Updating Launcher
Updating 2ad56e6..d032356
Fast-forward
 discourse-setup       | 2 +-
 image/base/Dockerfile | 5 +++--
 launcher              | 4 ++--
 3 files changed, 6 insertions(+), 5 deletions(-)
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
cat: templates/import/mysql-dev.template.yml: No such file or directory
cd /pups && git pull && /pups/bin/pups --stdin
/usr/bin/docker: invalid reference format: repository name must be lowercase.
See '/usr/bin/docker run --help'.
cat: cids/import_bootstrap.cid: No such file or directory
"docker rm" requires at least 1 argument.
See 'docker rm --help'.

Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]

Remove one or more containers
rm: cannot remove 'cids/import_bootstrap.cid': No such file or directory
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one
root@forum /var/discourse #support
1 me gusta

did you get it resolved? Im too having this error

No. we just manually re-uploaded all of the images.

So I found out the reason for the issue we were having. The import script is breaking when it is trying to get wp_bb_message_message table, that’s happening because you would not have BuddyPress private messages module (which create these table) installed in your WordPress.

I did manage to pass that error by removing the code in bbpress.rb from line 414 to 502
This

 def import_private_messages
puts "", "importing private messages..."
last_post_id = -1
total_posts = bbpress_query("SELECT COUNT(*) count FROM #{BB_PRESS_PREFIX}bp_messages_messages").first["count"]

threads = {}

total_count = bbpress_query("SELECT COUNT(*) count FROM #{BB_PRESS_PREFIX}bp_messages_recipients").first["count"]
current_count = 0

batches(BATCH_SIZE) do |offset|
  rows = bbpress_query(<<-SQL
    SELECT thread_id, user_id
      FROM #{BB_PRESS_PREFIX}bp_messages_recipients
  ORDER BY id
     LIMIT #{BATCH_SIZE}
    OFFSET #{offset}
  SQL
  ).to_a

  break if rows.empty?

  rows.each do |row|
    current_count += 1
    print_status(current_count, total_count, get_start_time('private_messages'))

    threads[row['thread_id']] ||= {
      target_user_ids: [],
      imported_topic_id: nil
    }
    user_id = user_id_from_imported_user_id(row['user_id'])
    if user_id && !threads[row['thread_id']][:target_user_ids].include?(user_id)
      threads[row['thread_id']][:target_user_ids] << user_id
    end
  end
end

batches(BATCH_SIZE) do |offset|
  posts =  bbpress_query(<<-SQL
    SELECT id,
           thread_id,
           date_sent,
           sender_id,
           subject,
           message
      FROM wp_bp_messages_messages
     WHERE id > #{last_post_id}
  ORDER BY thread_id, date_sent
     LIMIT #{BATCH_SIZE}
  SQL
  ).to_a

  break if posts.empty?

  last_post_id = posts[-1]["id"].to_i

  create_posts(posts, total: total_posts, offset: offset) do |post|
    if tcf = TopicCustomField.where(name: 'bb_thread_id', value: post['thread_id']).first
      {
        id: "pm#{post['id']}",
        topic_id: threads[post['thread_id']][:imported_topic_id],
        user_id: user_id_from_imported_user_id(post['sender_id']) || find_user_by_import_id(post['sender_id'])&.id || -1,
        raw: post['message'],
        created_at: post['date_sent'],
      }
    else
      # First post of the thread
      {
        id: "pm#{post['id']}",
        archetype: Archetype.private_message,
        user_id: user_id_from_imported_user_id(post['sender_id']) || find_user_by_import_id(post['sender_id'])&.id || -1,
        title: post['subject'],
        raw: post['message'],
        created_at: post['date_sent'],
        target_usernames: User.where(id: threads[post['thread_id']][:target_user_ids]).pluck(:username),
        post_create_action: proc do |new_post|
          if topic = new_post.topic
            threads[post['thread_id']][:imported_topic_id] = topic.id
            TopicCustomField.create(topic_id: topic.id, name: 'bb_thread_id', value: post['thread_id'])
          else
            puts "Error in post_create_action! Can't find topic!"
          end
        end
      }
    end
  end
end
end

You can also get past it by simply installing buddypress and enabling its private message module.

2 Me gusta

Thanks for your helpful tutorial , worked fine for me !

Cheers

Sam

Hi,
thank you for this how to :slight_smile:
Is the attachments are also imported ?

It looks like it. There is a configuration for the attachments directory.

1 me gusta

Hi,
Sorry but how do you generate yourbackup.sql ? What is this file supposed to contain ? An export of the bbpress databases ??

Thank you
++ .

That’s right. How to get it depends on what tools you have and what you know how to use.

A bbpress install is quite standard. A wordpress database and all posts inside wp_posts. So all I need is to dump the Wordpress posts database ?
Sorry to ask but I didn’t find any other instructions.

Thank you

You can either get a dump of the entire wordpress database or you can read the code and see what tables are actually used. It’s easier to dump the whole database.

Whether you do that with mysqump or cpanel or phpmtadmin or some other tool is hard make a recommendation for.

It works (after few tweaks) :slight_smile: :slight_smile: Thank you :wink:
succeed

1 me gusta

Tengo un error de conexión con la base de datos MySQL al importar. La base de datos SQL está en localhost. ¿Cómo puedo solucionar este error?

/var/www/discourse# su discourse -c “bundle exec ruby script/import_scripts/bbpress.rb”

/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect’: No se puede conectar al servidor MySQL local a través del socket ‘/var/run/mysqld/mysqld.sock’ (2) (Mysql2::Error::ConnectionError)

Gracias.

Si el servidor MySQL se está ejecutando en el servidor y no en el contenedor, intenta usar la dirección IP del host.

MySQL se está ejecutando en un contenedor donde también se ejecuta Discourse. Parece que el script de importación desde el contenedor de Discourse no puede conectarse al contenedor de MySQL. ¿Qué más puedo hacer?

¿Estás seguro? ¿Puedes conectarte a él con la herramienta de línea de comandos de mysql desde dentro del contenedor?

1 me gusta

Superé ese problema. Estaba usando localhost, luego me di cuenta de que la dirección IP para MySQL debería obtenerse de ```
docker inspect mysql | grep IPAddress.


Siguiente problema con el script de importación.. 

/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect': El plugin caching_sha2_password no se pudo cargar: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: no se puede abrir el objeto compartido: No existe el archivo o el directorio (Mysql2::Error::ConnectionError)

Usé el comando ALTER para cambiar la contraseña.

Solución al problema anterior: Ejecute nuevamente el siguiente comando.

ALTER USER 'root' IDENTIFIED WITH mysql_native_password BY 'newpassword';
1 me gusta

Después de probar algunas de las diversas correcciones publicadas anteriormente para problemas al ejecutar el importador, no veo que se importen publicaciones en absoluto. ¿Alguna idea de por qué obtengo una conexión exitosa a la nueva base de datos y luego no se importan publicaciones?

Estoy intentando importar unas pocas cientos de publicaciones en un sitio de WordPress (5.7) que no usa bbPress a un sitio de Discourse ya en funcionamiento con algunas cientos de publicaciones (2.7.0-beta5).

La base de datos importada parece existir:

mysql> show tables;
…
| wp_commentmeta        |
| wp_comments           |
| wp_links              |
| wp_options            |
| wp_postmeta           |
| wp_posts              |
| wp_term_relationships |
| wp_term_taxonomy      |
| wp_termmeta           |
| wp_terms              |
| wp_usermeta           |
| wp_users              |
…
Salida al ejecutar el importador:
/var/www/discourse# su discourse -c "bundle exec ruby script/import_scripts/bbpress.rb"
Cargando grupos existentes...
Cargando usuarios existentes...
Cargando categorías existentes...
Cargando publicaciones existentes...
Cargando temas existentes...

Importando usuarios...

Importando usuarios anónimos...

Importando categorías...

Importando temas y publicaciones...

Importando archivos adjuntos desde 'postmeta'...

Creando enlaces permanentes...

Actualizando el estado de los temas

Actualizando bumped_at en los temas

Actualizando last_posted_at en los usuarios

Actualizando last_seen_at en los usuarios

Actualizando first_post_created_at...

Actualizando el conteo de publicaciones de los usuarios...

Actualizando el conteo de temas de los usuarios...

Actualizando digest_attempted_at de los usuarios...

Actualizando usuarios de temas

Actualizando tiempos de publicaciones

Actualizando usuarios de temas destacados

Actualizando temas destacados en categorías
        6 / 6 (100.0%)  [1771 elementos/min]  ]  
Restableciendo contadores de temas


Listo (00h 00min 00sec)