Parece que es una pregunta frecuente y me disculpo de antemano si lo es: aparentemente no busqué lo suficiente ¿Cómo podría escribir un script para hacer lo mismo que el asistente en lugar de hacerlo a través de la interfaz web?
Pero… tal vez ahí es donde me pierdo: para que yo pueda llamar a la API necesito una clave de API. Y por lo tanto, un usuario administrador… que no tengo (aún). ¿Es posible llamar a la API sin una clave de API? ¿O obtener una clave de API que esté desvinculada de un usuario y tenga credenciales de administrador?
Parece que debería usar rake:admin para crear el usuario administrador. Más bien, creo que el usuario administrador ya está creado pero no aprobado, por lo que necesitaría cambiarlo para que quede aprobado.
¿O tal vez puedo crear una clave API con api_key:create_master y usarla para crear el usuario administrador?
Pero parece que no termino de entender cómo se debe usar esta clave maestra, porque esto no funciona:
# curl -X GET "https://forum2/categories" -H "Accept: application/json" -H "Api-Key: ad676e7413778aa3a5d315c35f91ef0edb4a4d4b2d644b924b7a88421cfa"
{"errors":["You are not permitted to view the requested resource. The API username or key is invalid."],"error_type":"invalid_access"}
Sin embargo, si creo un usuario administrador:
root@forum:/var/www/discourse# RAILS_DB=secondsite rake 'admin:create'
Email: loic@dachary.org
Password:
Repeat password:
Ensuring account is active!
Account created successfully with username loic
Do you want to grant Admin privileges to this account? (Y/n) Y
Your account now has Admin privileges!
y luego uso la misma clave maestra especificando el usuario recién creado, sí funciona:
Sí, exactamente. Quiero crear un nuevo foro desde cero y poblarlo con usuarios, categorías y temas, mediante un script que no requiera ninguna interacción con el navegador.
Si hubiera sido un solo intento, estaría bien. Pero quiero poder probar el script de importación. Y para que la prueba se ejecute, primero debe crear un Discourse desde cero, sin requerir ningún tipo de intervención manual en medio de la prueba automatizada
Gano una parte significativa de mi sustento trabajando con importaciones. Estoy bastante seguro de que lo que describo a continuación es prácticamente cómo lo hacen todos los que realizan importaciones de forma regular.
Lo que recomendaría es:
configurar y ejecutar el importador
probar que hace lo que necesitas
crear un script para volver a ejecutar el importador e importar los datos adquiridos desde la primera ejecución
probar eso
ejecutar la importación final cuando todo lo anterior funcione.
restaurar esos datos en tu servidor de producción
La tarea de migración y la tarea de configurar un servidor de producción son completamente diferentes y tienen requisitos distintos. Por lo general, la tarea de migración requiere cosas que el servidor de producción no necesita (aunque creo que el importador de Mailman es una excepción).
Ejecutar una migración en un servidor multisitio parece especialmente imprudente.
Esa es aún más razón para que volver a ejecutar la importación desde cero sea una mala idea. Probablemente tomaría semanas. Cuando vuelves a ejecutar el importador, solo se importan los datos nuevos (y a menudo lo modifico para que omita por completo los datos antiguos).
Es probable que puedas modificar el script para usar una categoría existente creando un CategoryCustomField. Recomiendo empezar con una base de datos vacía y dejar que el script la cree; luego puedes personalizarla como quieras y, al volver a ejecutar el script, seguirá usándola.
El verdadero peligro de tu importación es que probablemente haya diferencias en los datos a lo largo de los años, por lo que lo que funciona para datos de hace 10 años no funcionará para datos de hace 5 años y así sucesivamente. Pero quizás tengas suerte.
No estoy seguro de si eso es un cumplido
Siempre utilizo multisitio para las importaciones. Permite que múltiples foros coexistan: uno que estoy modificando mientras el cliente puede revisar la importación en su vecino. Además, es fácil copiar una base de datos para reiniciar desde un punto determinado.
¡Vaya, me dejo caer con una pluma! Eres casi la única persona en el planeta que no trabaja para CDCK de la que creo que sabe más sobre importaciones que yo, y si usas multisitio para las importaciones, bueno, consideraré hacer lo mismo. Por lo general, activo contenedores separados en el mismo host con traefik al frente, así que supongo que es algo parecido, pero no del todo.