Cómo crear un nuevo usuario en SQL puro

¿Cuáles son las tablas mínimas requeridas donde se deben agregar filas para crear un usuario que luego aparezca visible y activo en Discourse?

Acabo de insertar una fila en user_emails:

insert into user_emails (user_id, email, "primary", created_at, updated_at) values (2,'user@email.com',true, now(), now());

Como era de esperar, no ha aparecido en la interfaz gráfica. ¿Cuáles son los pasos mínimos? ¿Necesito agregar datos a más tablas o debo reiniciar algo?

Ahora, es probable que alguien diga que esta no es la forma correcta de hacerlo, y lo entiendo. Sin embargo, para mí podría ser necesario, como explicaré a continuación (algunas de mis suposiciones pueden ser incorrectas, pero así es como lo entiendo):

  • Todos los scripts de importación que traen datos desde otro foro basado en base de datos esperan poder conectarse al otro foro desde la instancia de Discourse. Pero acceder al otro foro (jforum) desde una instancia de Discourse en producción será difícil, si no imposible. De manera similar, intentar instalar un entorno de desarrollo de Discourse donde resida el foro antiguo (un servidor muy antiguo) tampoco es posible.
  • No entiendo Ruby on Rails, por lo que no puedo modificar los scripts existentes, pero sí entiendo SQL.
  • Podría usar la API (solo tengo 5000 usuarios), pero quiero poder utilizar un método o plugin que conserve el hash de contraseña MD5, en lugar de obligar a todos los usuarios a restablecer sus contraseñas. Por lo tanto, creo que no puedo hacer esto mediante la API.
  • Existe un script de importación para jforum, por lo que puedo usarlo para revisar el SQL necesario para extraer datos de jforum sin problemas y luego colocarlos en archivos CSV para cargarlos en la base de datos.
  • Los importadores masivos posiblemente proporcionen una forma de agregar SQL directamente a Discourse, pero me cuesta ver el SQL necesario.
  • Parece que lo clave es importar los usuarios; luego, agregar categorías, temas y publicaciones no debería ser tan difícil.

¡Exacto!

Si lo entendieras, no estarías preguntando. :wink:

Es muy probable que termines con una base de datos corrupta. Y entonces nadie podrá ayudarte.

Haz una copia de seguridad de tu base de datos y restaura en tu servidor local de Discourse (o en cualquier lugar al que pueda conectarse; he realizado importaciones más grandes con una base de datos remota a través de mi conexión a internet doméstica) y luego ejecuta el script existente.

Será mucho más fácil usar Ruby, que no entiendes, que entenderlo lo suficiente como para averiguar cómo escribir el SQL. Yo aprendí Ruby mucho tiempo después de escribir mi primer importador.

¡Eso es un poco condescendiente!
Si el script de importación masiva está ejecutando SQL (como creo que lo hace), documentar el SQL necesario para crear un usuario no es realmente más peligroso que intentar usar un script de importación masiva. Y dado que actualmente tengo una instalación estándar de Discourse, no importaría demasiado si se estropeara. Creo que tengo muchos más años de experiencia en desarrollo que tú.

Lo que no tengo con gran experiencia son todas las tareas de administración, y mi primer intento de instalar un servidor local de Discourse abrió una caja de pandora. Si no puedo conectarme a mi servidor MySQL de JForum desde mi servidor de Discourse, tendré que instalar MySQL también y transferir la base de datos. El script existente de JForum no está incluido en el árbol de código fuente principal, y estoy en una versión muy antigua de JForum, así que no espero que funcione.

No quise ofender. Supongo que no viste el :wink?

¡Apuesto a que tienes razón!

A veces, el consejo gratuito de alguien que ha trabajado a tiempo completo con Discourse durante más de tres años, ha realizado decenas de importaciones y ha escrito varios importadores desde cero vale lo que pagas por él.

¿Qué tal si configuras un túnel SSH?

Inconsistente, tal vez. Corrupta, no.

Pero puedes crear los usuarios mediante la API e insertar los hashes MD5 en un campo personalizado usando SQL. Obtendrás lo mejor de ambos mundos.

¡Oh! Esa es una idea bastante genial.

¡Este es el consejo gratuito que estás buscando!

Sí, había pensado en eso, pero como no termino de entender cómo funciona el hashing MD5, no estaba claro si era posible. Bien, lo probaré.

Todo lo que necesitas hacer es insertar un campo personalizado:

  • user_id: obvio
  • name: “import_pass”
  • value: el resumen md5

Y instala el plugin migratepassword.

Gracias, tengo algunas preguntas con las que espero puedas ayudarme.

Instalación

Ejecuta bundle exec rake plugin:install repo=http://github.com/[Communiteq](https://www.communiteq.com) (anteriormente DiscourseHosting)/discourse-migratepassword en tu directorio de Discourse
Reinicia Discourse
  1. Ya lo he instalado, pero ¿cómo reinicio Discourse?

  2. ¿Cómo inserto el campo personalizado? ¿Puedes proporcionarme el SQL, o se puede hacer mediante la API con la parte "user_fields[1]": "string"? Actualmente puedo crear usuarios programáticamente mediante la API, pero estoy ignorando este campo por ahora.

  3. Si tienes el plugin instalado, ¿es irrelevante el valor de la contraseña que se pasa como parte de la llamada a la API para crear un usuario?

  1. no, prevalecerá sobre el resumen MD5 en el campo personalizado.

Las respuestas a las otras dos preguntas se pueden encontrar fácilmente en este foro. Si quieres ahorrar tiempo, podemos realizar la importación y/o el alojamiento por ti como un servicio de pago.

Busqué ambas respuestas pero no pude encontrarlas. En el primer caso, resulta confuso que algunas instalaciones se realicen editando el archivo YAML y luego reiniciando Docker, mientras que otras, como esta, parecen instalarse dentro del contenedor de Docker; no queda claro qué significa «reiniciar» en este contexto.

No logro encontrar ningún SQL puro en este foro.

Me sorprende que parezca haber tanta presión para vender servicios de pago al usar este software de código abierto; nunca había visto algo así cuando hacía preguntas en Stack Overflow.

Me encanta colaborar, innovar y contribuir. Pero también necesito ganarme la vida, y eso significa que debo trazar un límite en algún lugar, y trato de hacerlo donde siento que estoy trabajando en lugar de innovar, contribuir y colaborar.

Buscar la consulta SQL para un campo personalizado de usuario es trabajo para mí, y como eres un desarrollador experimentado, estimo que también podrás averiguarlo :smiley:

Bueno, desde luego puedo intentarlo y resolverlo, pero no hay ningún daño en preguntar, ya que no

se puede encontrar fácilmente en este foro

En cuanto a la otra pregunta, bueno, sigue sin estar clara para mí.

No espero que hagas mi trabajo por mí; por otro lado, generalmente me resulta frustrante cómo la documentación asume mucho por parte de los usuarios.

OK, pregunta 2: un ejemplo de cómo agregar un campo personalizado import_pass para el user_id 5 (el user_id se puede ver en la tabla user_emails o el id de la tabla users)

insert into user_custom_fields (user_id, name, value, created_at, updated_at) values (5,‘import_pass’,‘2aee1c40222c7754d4534e61452612cc’, now(), now());

Vale, lo he encontrado:
./launcher restart app

Pero parece que no se está reiniciando. Puedo entrar en la aplicación y conectarme a la base de datos, pero no puedo acceder al sitio web. Quizás solo tenga que reconstruirlo y empezar de nuevo.

Así que ejecuté ./launcher rebuild app y ahora está de nuevo y funcionando.

Pensé que esto volvería a crear la base de datos, pero no lo ha hecho, así que supongo que es porque la base de datos real persiste fuera de Docker y rebuild solo reconstruye la aplicación de Docker. También veo que el plugin dataexplorer que agregué (modificando el archivo yaml) sigue ahí. Pero, ¿está el plugin passwordmigration o se borra con rebuild? Ciertamente no hay nada en la sección de plugins de la página de administración.

Bien, intenté instalar passwordmigration y luego ejecuté restart de nuevo, y una vez más mi sitio está caído. Parece que passwordmigration está rompiendo algo.

Así que reconstruí de nuevo, lo hice funcionar (pero ahora falta el plugin passwordmigration). Si ejecuto ./launcher restart app sin instalar migrationpassword primero, se reinicia correctamente, así que parece haber un problema particular con migrationpassword en mi configuración.

La última vez que lo intenté, el plugin passwordmigration era incompatible con la ejecución de una importación, así que querrás instalarlo después de realizar la importación.

Podría ser que esté causando problemas en tu reconstrucción, pero eso sería bastante sorprendente, ya que Richard lo utiliza en su alojamiento. Recomiendo que lo instales en app.yml tal como hiciste con el explorador de datos, una vez que hayas completado la importación.

Ejecuta rm -rf en los directorios de postgres en /var/discourse/shared/standalone si deseas obtener una nueva base de datos. Tal vez puedas echar un vistazo a https://meta.discourse.org/t/advanced-troubleshooting-with-docker/15927

Desactivarlo durante la importación debería ser suficiente.

Estrano: eliminé la base de datos y ejecuté ./discourse-setup, así que tuve una instalación completamente nueva; todo funcionó bien.
Instalé migrationpassword con rake y reinicié, pero el sitio web vuelve a fallar con error 502.
El plugin DataExplorer aún existía, así que lo eliminé, reconstruí y todo estuvo bien; luego reinstalé migrationpassword y vuelve a fallar con error 502.

Es muy confuso porque claramente funciona para otros, pero no en mi instalación estándar.

Intentaré instalarlo editando el archivo app.yml a continuación.

(Las compras de Navidad me lo impidieron), pero por fin probé a instalar migratepassword editando app.yml y reconstruyendo, ¡y funcionó!
Pero la opción bundle exec rake plugin:install repo=http://github.com/[Communiteq](https://www.communiteq.com) (formerly DiscourseHosting)/discourse-migratepassword no funciona en mi instalación estándar; quizás sea necesario verificarla o eliminarla en el README.md de GitHub - communiteq/discourse-migratepassword: Support migrated password hashes · GitHub