Criação em massa de usuários com rails etc

Quero adicionar nomes de usuário em massa (para criar usuários fictícios iniciais para criar postagens).
Então, tentei criar um arquivo rake, carregá-lo e executá-lo. Mas não tive sucesso. O arquivo rake nem sempre é carregado, e quando uso outro método, ele é carregado e então um erro é lançado “Não sei como criar…” erro lançado por rails c (nem consigo me lembrar da mensagem de erro, pois tentei mil métodos diferentes por horas para fazê-lo funcionar sem sucesso)

O que eu fiz
Criei o arquivo users.rake

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

Editando com nano

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

E então colei o seguinte código no editor e salvei

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

Carregado no rails c e carregado nas tarefas

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

Então tentei criar os usuários

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

Existe algum outro método que eu possa tentar pelo terminal sem usar coisas de terceiros.

Use rake dev:populate para popular com os dados de teste prontos para uso - fácil!

3 curtidas

Obrigado pelo seu comentário.

Seu método apenas preencherá o site com alguns usuários e dados aleatórios, o que eu não quero. E eu não quero um site online simulado, posso apenas hospedá-lo localmente se quiser.

Isso é para um ambiente de produção. Usuários fictícios terão tópicos significativos. O propósito disso não é apresentar um site vazio ao público.

Portanto, por favor, me informe uma solução relacionada à pergunta que mencionei.
Eu só preciso inserir usuários (eu tenho a lista de nomes para os usuários) no banco de dados principal do Discourse.

Obrigado.

Você pode usar esta técnica para instalações de desenvolvimento local também (esse é o seu propósito principal).

Por que não ler o código para essa tarefa rake e modificá-la como achar melhor?

1 curtida

Recomendo que você olhe os scripts de importação em script/import_scripts e procure por um que leia arquivos CSV.

Eu estava planejando um script ou plugin que permitiria criar coisas a partir de uma planilha, mas tive outros trabalhos no caminho.

1 curtida

Eu alterei o código, mas o discourse de produção no container docker, eu criei um arquivo rake com touch e editei no nano, então entrei no app com ./launcher enter app, depois entrei no rails e verifiquei rake -T e o arquivo rake não é carregado. Esta é minha principal preocupação. Eu nem consigo testar o arquivo em produção.

No entanto, em localhost, não há problema, eu apenas copiei e colei o arquivo em lib/tasks e ele funciona bem. Este docker e container docker é uma dor quando você precisa acessar as coisas diretamente. E eu nem consigo descobrir por que ele não é carregado automaticamente na lista de tarefas rake.

Portanto, ainda estou preso na produção, pois o arquivo rake não é carregado automaticamente, então não consigo executar o comando.

Seu site não me dará suporte se eu não usar o docker, caso contrário, eu ficaria mais do que feliz em remover o docker e hospedar o site diretamente. Isso tornaria a vida muito mais fácil.

Normalmente, as tarefas do rake são testadas em desenvolvimento e podem ser implantadas como parte de um plugin.

1 curtida

Se você o tem funcionando localmente, pode fazer backup lá e restaurar em produção.

Você colocou seu arquivo em /var/www/discourse/lib/rake dentro do contêiner?

O problema é que, quando o backup local é carregado no site ativo, ele substituirá todo o conteúdo que fiz no site ativo. Tenho uma instância local, mas alguém neste fórum sugeriu que eu usasse o site ativo para fazer o desenvolvimento. Então, estou desenvolvendo no site ativo (ele ainda não é oficialmente público, no entanto).

E coloquei o arquivo em lib/tasks, a instância local funciona, não a instância ativa. Tentarei também o lib/rake.

1 curtida

Você não deve desenvolver em um site ativo.

Você desenvolve localmente, empacota as alterações em um Componente de Tema ou plug-in e, em seguida, implanta no site ativo.

Aqui está um exemplo de uma tarefa rake em um plugin:

2 curtidas

Eu acho que você não deveria desenvolver Rails ou Ember em uma instalação padrão, mas eu regularmente faço importações em um contêiner de produção. Como é apenas uma tarefa do Rake, você nem precisa reiniciar o servidor para que as alterações entrem em vigor.

Como não é público, deve ser seguro reverter para um backup se algo der errado. Provavelmente é aí que eu faria isso.

Você poderia fazer backup do site ativo e restaurá-lo no site de desenvolvimento, fazer o trabalho e depois fazer backup/restaurar de volta para o site ativo.

3 curtidas