Creación masiva de usuarios con rails etc

Quiero agregar nombres de usuario en masa (para crear usuarios iniciales ficticios para crear publicaciones).
Así que intenté crear un archivo rake, cargarlo y luego ejecutarlo. Pero no tuve éxito. El archivo rake ni siquiera se carga a veces, y cuando uso otro método, se carga y luego se lanza un error “No sé cómo crear…” error lanzado por rails c (ni siquiera recuerdo el mensaje de error, ya que intenté mil métodos diferentes durante horas para que funcionara sin éxito).

Lo que hice
Creé el archivo users.rake

cd /var/www/discourse
mkdir -p lib/tasks
touch lib/tasks/users.rake

Editándolo con nano

cd /var/www/discourse/lib/tasks
sudo nano users.rake

Y luego pegué el siguiente código en el editor y guardé

namespace :users do
  desc "Create users from a list"
  task :create, [:usernames, :password, :domain] => :environment do |task, args|
    usernames = args[:usernames].split(',')
    password = args[:password]
    domain = args[:domain]

    User.transaction do
      usernames.each do |username|
        next if User.exists?(username: username)

        email = "#{username}@#{domain}"
        user = User.new(username: username, email: email, password: password)

        unless user.save
          puts "Failed to save user #{username}: #{user.errors.full_messages.join(", ")}"
          raise ActiveRecord::Rollback
        end
      end
    end
  end
end

Cargado en rails c y cargado en tareas

rails console
load 'lib/tasks/users.rake'
exit

Luego intenté crear los usuarios

./launcher enter app
rake users:create["username1,username2", "password", "domain.com"]

¿Hay algún otro método que pueda intentar a través de la terminal sin usar cosas de terceros?

Usa rake dev:populate para poblar con los datos de prueba listos para usar. ¡Fácil!

3 Me gusta

Gracias por tu comentario.

Tu método solo llenará el sitio con usuarios y datos aleatorios, lo cual no quiero. Y no quiero un sitio en línea de prueba, puedo alojarlo localmente si quiero.

Esto es para un entorno de producción. Los usuarios ficticios tendrán temas significativos. El propósito de esto no es presentar un sitio vacío al público.

Por lo tanto, por favor, házmelo saber una solución relacionada con la pregunta que mencioné.
Solo necesito insertar usuarios (tengo la lista de nombres de los usuarios) en la base de datos principal de Discourse.

Gracias.

Puedes usar esta técnica para instalaciones de desarrollo local también (ese es su propósito principal).

¿Por qué no lees el código de esa tarea rake y la modificas como mejor te parezca?

1 me gusta

Te recomiendo que mires los scripts de importación en script/import_scripts y busques uno que lea archivos CSV.

Había estado planeando un script o plugin que te permitiría crear cosas a partir de una hoja de cálculo, pero he tenido otros trabajos en el camino.

1 me gusta

He modificado el código, pero el discurso de producción en el contenedor de Docker, creé un archivo rake con touch y lo edité en nano, luego entré a la aplicación con ./launcher enter app, luego entré a Rails y verifiqué rake -T y el archivo rake no se carga. Esta es mi principal preocupación. Ni siquiera puedo probar el archivo en producción.

Sin embargo, en localhost, no hay problema, simplemente copié y pegué el archivo en lib/tasks y funciona bien. Este Docker y contenedor de Docker son un dolor de cabeza cuando necesitas acceder a las cosas directamente. Y ni siquiera puedo averiguar por qué no se carga automáticamente en la lista de tareas de Rake.

Por lo tanto, todavía estoy atascado en producción ya que el archivo rake no se carga automáticamente, por lo que no puedo ejecutar el comando.

Su sitio no me apoyará si no uso Docker, de lo contrario, estaría más que feliz de eliminar Docker y alojar el sitio directamente. Eso haría la vida mucho más fácil.

Normalmente, las tareas de rake se prueban en desarrollo y se pueden implementar como parte de un plugin.

1 me gusta

Si lo tienes funcionando localmente, puedes hacer una copia de seguridad allí y restaurarla en producción.

¿Pusiste tu archivo en /var/www/discourse/lib/rake dentro del contenedor?

El problema es que cuando la copia de seguridad local se sube al sitio en vivo, reemplazará todo el contenido que hice en el sitio en vivo. Tengo una instancia local, pero alguien en este foro me sugirió que usara el sitio en vivo para el desarrollo. Así que ahora estoy desarrollando en el sitio en vivo (aunque todavía no es público oficialmente).

Y puse el archivo en lib/tasks, la instancia local funciona, no la instancia en vivo. Intentaré también con lib/rake.

1 me gusta

No deberías desarrollar en un sitio en vivo.

Desarrollas localmente, empaquetas los cambios en un Componente de Tema o un plugin y luego los implementas en el sitio en vivo.

Aquí tienes un ejemplo de una tarea rake en un plugin:

2 Me gusta

Creo que no deberías desarrollar Rails o Ember en una instalación estándar, pero regularmente hago importaciones en un contenedor de producción. Dado que es solo una tarea de rake, ni siquiera necesitas reiniciar el servidor para que los cambios surtan efecto.

Dado que no es público, debería ser seguro revertir a una copia de seguridad si algo sale mal. Probablemente ahí es donde lo haría.

Podrías hacer una copia de seguridad del sitio en producción y restaurarla en el sitio de desarrollo, hacer el trabajo y luego hacer una copia de seguridad/restauración de vuelta al sitio en producción.

3 Me gusta