Création en masse d'utilisateurs avec rails etc

Je veux ajouter des noms d’utilisateur en masse (pour créer des utilisateurs fictifs initiaux afin de créer des publications).
J’ai donc essayé de créer un fichier rake, de le charger puis de l’exécuter. Mais je n’ai eu aucun succès. Le fichier rake n’est même pas chargé parfois, et quand j’utilise une autre méthode, il est chargé puis une erreur est générée « Je ne sais pas comment créer… » générée par rails c (je ne me souviens même pas du message d’erreur car j’ai essayé mille méthodes différentes pendant des heures pour y parvenir sans succès).

Ce que j’ai fait
Création du fichier users.rake

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

Édition avec nano

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

Et j’ai ensuite collé le code suivant dans l’éditeur et sauvegardé

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

Chargé dans rails c et chargé dans les tâches

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

Puis j’ai essayé de créer les utilisateurs

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

Existe-t-il une autre méthode que je peux essayer via le terminal sans utiliser de choses tierces.

Utilisez rake dev:populate pour peupler avec les données de test prêtes à l’emploi - facile !

3 « J'aime »

Merci pour votre commentaire.

Votre méthode remplira simplement le site de quelques utilisateurs et données aléatoires, ce que je ne veux pas. Et je ne veux pas d’un site en ligne simulé, je peux l’héberger localement si je le souhaite.

Ceci est pour un environnement de production. Les utilisateurs fictifs auront en fait des sujets significatifs. Le but n’est pas de présenter un site vide au public.

Alors, merci de me faire connaître une solution liée à la question que j’ai mentionnée.
J’ai juste besoin d’insérer des utilisateurs (j’ai la liste des noms des utilisateurs) dans la base de données principale de Discourse.

Merci.

Vous pouvez également utiliser cette technique pour les installations de développement locales (c’est son objectif principal).

Pourquoi ne pas lire le code de cette tâche rake et la modifier comme bon vous semble ?

1 « J'aime »

Je vous recommande de regarder les scripts d’importation dans script/import_scripts et de chercher celui qui lit les fichiers CSV.

J’avais prévu un script ou un plugin qui permettrait de créer des choses à partir d’une feuille de calcul, mais j’ai eu d’autres travaux en cours.

1 « J'aime »

J’ai modifié le code, mais le discours de production dans le conteneur Docker, j’ai créé un fichier rake avec touch et l’ai édité dans nano, puis je suis entré dans l’application avec ./launcher enter app, puis je suis entré dans rails et j’ai vérifié rake -T et le fichier rake n’est pas chargé. C’est ma principale préoccupation. Je ne peux même pas tester le fichier en production.

Cependant, en localhost, il n’y a pas de problème, j’ai juste copié et collé le fichier dans lib/tasks et cela fonctionne bien. Ce Docker et ce conteneur Docker sont une plaie quand vous avez besoin d’accéder directement aux choses. Et je ne peux même pas comprendre pourquoi il n’est pas automatiquement chargé dans la liste des tâches rake.

Je suis donc toujours bloqué en production car le fichier rake n’est pas automatiquement chargé, je ne peux donc pas exécuter la commande.

Votre site ne me soutiendra pas si je n’utilise pas Docker, sinon j’aurais été plus qu’heureux de supprimer Docker et d’héberger le site directement. Cela rendrait la vie beaucoup plus facile.

Normalement, les tâches rake sont testées en développement et peuvent être déployées dans le cadre d’un plugin.

1 « J'aime »

Si vous l’avez fait fonctionner localement, vous pouvez sauvegarder là-bas et restaurer en production.

Avez-vous mis votre fichier dans /var/www/discourse/lib/rake à l’intérieur du conteneur ?

Le problème est que lorsque la sauvegarde locale est téléchargée sur le site en direct, elle remplacera tout le contenu que j’ai créé sur le site en direct. J’ai une instance locale, mais quelqu’un sur ce forum m’a suggéré d’utiliser le site en direct pour le développement. Je développe donc actuellement sur le site en direct (il n’est cependant pas encore officiellement public).

Et j’ai mis le fichier dans lib/tasks, l’instance locale fonctionne, pas l’instance en direct. J’essaierai également lib/rake.

1 « J'aime »

Vous ne devriez pas développer sur un site en production.

Vous développez localement, emballez les modifications dans un composant de thème ou un plugin, puis déployez sur le site en production.

Voici un exemple de tâche Rake dans un plugin :

2 « J'aime »

Je pense que vous ne devriez pas développer en rails ou en ember sur une installation standard, mais j’importe régulièrement dans un conteneur de production. Puisqu’il ne s’agit que d’une tâche de type rake, vous n’avez même pas besoin de redémarrer le serveur pour que les changements prennent effet.

Comme ce n’est pas public, cela devrait être sûr de revenir à une sauvegarde si quelque chose tourne mal. C’est probablement là que je le ferais.

Vous pourriez sauvegarder le site en production et le restaurer sur le site de développement, faire le travail, puis sauvegarder/restaurer à nouveau sur le site en production.

3 « J'aime »