Импорт пользователей через CSV

Я знаю, что существует «фронтенд-способ» приглашения пользователей через CSV, однако в моём случае это не сработает, так как это приведёт к отправке писем тысячам людей, которые будут добавлены на сайт.

При попытке добавить их через CLI я получаю следующие ошибки.

/var/www/discourse# rails runner script/import_scripts/csv_importer.rb /var/www/discourse/tmp/users.csv
Загрузка существующих групп…
Загрузка существующих пользователей…
Загрузка существующих категорий…
Загрузка существующих постов…
Загрузка существующих тем…
Файл не существует: /var/www/discourse/tmp/emails.csv
Файл не существует: /var/www/discourse/tmp/custom_fields.csv
bundler: не удалось загрузить команду: script/rails (script/rails)
/var/www/discourse/script/import_scripts/csv_importer.rb:29:in initialize': undefined method headers’ for nil (NoMethodError)

@imported_custom_fields_names = @imported_custom_fields.headers.drop(1)
                                                       ^^^^^^^^

Есть ли у кого-нибудь идеи, что может происходить?

Этот скрипт является скриптом миграции и не предназначен для выполнения единственной задачи по добавлению пользователей.

Вы просто хотите создать большое количество реальных учётных записей пользователей или они нужны для тестирования?

Ага! Я увидел импорт, а не миграцию! Спасибо за подсказку.

Я хочу импортировать большое количество пользователей через CSV.

Импорт и миграция здесь — в основном синонимы.

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

Вам, вероятно, потребуется немного понимать программирование, чтобы это заработало.

Прежде всего — с днём рождения.

У меня практически нет навыков программирования. Я предположил, что всё будет так просто: запустить файл import.rb, «указывающий» на users.csv.

Сообщения об ошибках, которые он выдал, абсолютно для меня не имеют смысла. Я посмотрел на строку 29 скрипта импорта, и там упоминались заголовки, поэтому я решил, что речь идёт о столбцах CSV-файла, и потратил некоторое время на их настройку, но безрезультатно.

Что ж, вы не продвинулись далеко, так как файл даже не открылся.

Это один из тех раздражающих моментов, когда процесс может занять как 30 секунд, так и часы.

Но вы можете попробовать скопировать файл туда. Это непросто, потому что это одно место в файловой системе компьютера и другое — внутри контейнера. Как только вы решите эту проблему, сможете начать работать с заголовками столбцов.

Иногда для первоначальной проблемы[1] существует простое решение.

Отключите рассылку писем, импортируйте пользователей, а затем снова включите рассылку.


  1. см. проблема X-Y ↩︎

Ага, но проблема в том, что, как я понимаю, импортер подхватил файл users.csv.

У меня нет и не будет необходимости импортировать файлы типа emails.csv и так далее.

Или это многофайловый импортер? То есть имена пользователей в одном CSV-файле, а адреса электронной почты — в другом (emails.csv)?

Похоже, что он находит файл users.csv, так как не выдаёт ошибку именно по этому файлу.

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

Отлично, я на правильном пути. Буду продолжать упорно работать над этим.

Вот где устанавливается имя файла:

  CSV_FILE_PATH = ENV["CSV_USER_FILE"] || "/var/www/discourse/tmp/users.csv"

Так что либо поместите файл туда, либо установите переменную окружения CSV_USER_FILE в путь к файлу, куда вы его поместили.

О, но первое, что делает скрипт, — это считывает ВСЕ ожидаемые CSV-файлы (все строки вида @... = load_csv), поэтому вам нужно закомментировать или удалить те, которые вам не нужны. Кроме того, import_users работает с данными пользовательских полей, поэтому это тоже нужно изменить.

Если этого недостаточно, и у вас есть бюджет, отправьте мне (в моем профиле) сумму по электронной почте, и я посмотрю, как могу помочь вам за эту сумму.