Массовое создание пользователей с помощью Rails и других инструментов

Я хочу добавить множество имен пользователей (чтобы создать начальных тестовых пользователей для публикации постов).

Я пытался создать файл rake, загрузить его и затем запустить, но без успеха. Файл rake иногда даже не загружается, а когда я использую другой метод, он загружается, но возникает ошибка: «I don’t know how to create …» (ошибка, выдаваемая rails c — я даже не могу вспомнить точный текст ошибки, так как пробовал тысячи разных методов в течение часов, чтобы заставить это работать, но безуспешно).

Что я сделал:

Создал файл users.rake

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

Редактировал его с помощью nano

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

Затем вставил следующий код в редактор и сохранил

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

Загрузил в rails c и загрузил в задачи

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

Затем попытался создать пользователей

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

Есть ли какой-то другой метод, который я мог бы попробовать через терминал, не используя сторонние инструменты?

Используйте rake dev:populate для заполнения тестовыми данными «из коробки» — это просто!

Спасибо за ваш комментарий.

Ваш метод просто заполнит сайт случайными пользователями и данными, чего я не хочу. Мне также не нужна демонстрационная онлайн-версия сайта — если захочу, я могу разместить его локально.

Речь идет о производственной среде. Фейковые пользователи будут иметь действительно значимые темы. Цель не в том, чтобы представить публике пустой сайт.

Поэтому, пожалуйста, сообщите мне решение, связанное с заданным мной вопросом.

Мне нужно просто вставить пользователей (у меня есть список имен) в основную базу данных Discourse.

Спасибо.

Вы также можете использовать этот метод для локальных установок в целях разработки (это его основное назначение).

Почему бы вам не прочитать код этой rake-задачи и не изменить его по своему усмотрению?

Рекомендую вам посмотреть скрипты импорта в папке script/import_scripts и найти тот, который читает CSV-файлы.

Я планировал создать скрипт или плагин, который позволит создавать объекты из электронной таблицы, но другие работы помешали.

Я внес изменения в код, но в продакшн-окружении в Docker-контейнере я создал файл Rake с помощью команды touch и отредактировал его в nano, затем зашел в приложение через ./launcher enter app, вошел в Rails и проверил rake -T, однако файл Rake не загрузился. Это моя главная проблема. Я даже не могу протестировать файл в продакшн-окружении.

Однако в локальной среде проблем нет: я просто скопировал и вставил файл в lib/tasks, и всё работает. Docker и Docker-контейнеры вызывают боль, когда нужно получить прямой доступ к чему-либо. И я не могу понять, почему файл не загружается автоматически в список задач Rake.

Поэтому я всё ещё застрял в продакшн-окружении, так как файл Rake не загружается автоматически, и я не могу выполнить команду.

Ваша поддержка не поможет, если я не буду использовать Docker. Иначе я бы с радостью отказался от Docker и разместил сайт напрямую. Это значительно упростило бы жизнь.

Обычно задачи Rake тестируются в среде разработки и могут быть развернуты как часть плагина.

Если у вас это работает локально, вы можете создать резервную копию там и восстановить её на продакшене.

Вы поместили ваш файл в /var/www/discourse/lib/rake внутри контейнера?

Проблема в том, что при загрузке локальной резервной копии на рабочий сайт она заменит всё содержимое, которое я создал на рабочем сайте. У меня есть локальная копия, но кто-то на этом форуме посоветовал мне вести разработку на рабочем сайте. Поэтому я сейчас разрабатываю на рабочем сайте (хотя он ещё официально не опубликован).

Я поместил файл в lib/tasks, и локальная копия работает, а рабочая — нет. Я также попробую lib/rake.

Не следует разрабатывать на работающем сайте.

Разработка ведётся локально, изменения упаковываются в компонент темы или плагин, а затем развёртываются на работающем сайте.

Вот пример задачи rake в плагине:

Я считаю, что не стоит разрабатывать на Rails или Ember в стандартной установке, но я регулярно выполняю импорт в контейнере продакшена. Поскольку это просто задача Rake, вам даже не нужно перезапускать сервер, чтобы изменения вступили в силу.

Так как это не публично, должно быть безопасно откатиться к резервной копии, если что-то пойдет не так. Вероятно, именно там я бы это делал.

Вы можете сделать резервную копию работающего сайта, восстановить её на тестовом сайте, выполнить работу, а затем сделать резервную копию и восстановить обратно на работающий сайт.