Rails 등으로 사용자 대량 생성

대량 사용자 이름(게시물을 생성하기 위한 초기 더미 사용자를 생성하기 위함)을 추가하고 싶습니다.
그래서 rake 파일을 만들고, 로드한 다음 실행하는 방법을 시도해 보았지만 성공하지 못했습니다. rake 파일이 로드조차 되지 않는 경우가 있고, 다른 방법을 사용하면 로드되긴 하지만 rails c에서 "I don’t know how to create …"라는 에러가 발생했습니다 (시간을 들여 수백 가지 다른 방법을 시도했지만 성공하지 못해 에러 메시지도 정확히 기억나지 않습니다).

내가 한 일

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에 로드하고 tasks에 로드했습니다.

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

그리고 사용자 생성을 시도

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

서드파티 도구를 사용하지 않고 터미널을 통해 시도해 볼 수 있는 다른 방법이 있을까요?

rake dev:populate를 사용하면 기본 제공되는 테스트 데이터로 시드를 쉽게 채울 수 있습니다!

댓글 감사합니다.

말씀하신 방법은 사이트에 무작위 사용자와 데이터를 채우는 것뿐이라 원치 않습니다. 또한 임시로 공개된 사이트도 원하지 않으며, 원할 경우 로컬에서 호스팅하면 됩니다.

이는 프로덕션 환경을 위한 것입니다. 더미 사용자에게는 실제로 의미 있는 주제들이 할당됩니다. 이 작업의 목적은 빈 사이트를 대중에게 공개하는 것이 아닙니다.

따라서 제가 언급한 질문에 대한 해결책을 알려주시면 감사하겠습니다.
Discourse의 메인 DB에 사용자(사용자 이름 목록은 이미 보유하고 있습니다)를 삽입하는 것만 필요합니다.

감사합니다.

이 기술은 로컬 개발 환경 설치에도 사용할 수 있습니다(이것이 주된 용도입니다).

해당 rake 태스크의 코드를 읽고 원하는 대로 수정해 보는 것은 어떨까요?

script/import_scripts 디렉토리의 가져오기 스크립트들을 확인해 보시고, CSV 파일을 읽는 스크립트를 찾아보시는 것을 추천합니다.

스프레드시트로부터 항목을 생성할 수 있도록 해주는 스크립트나 플러그인을 계획하고 있었지만, 다른 업무로 인해 진행하지 못했습니다.

코드를 수정했는데, 도커 컨테이너 내의 프로덕션 디스커스 환경에서 touch 명령으로 rake 파일을 생성하고 nano로 편집한 후, ./launcher enter app으로 앱에 진입하고 rails를 실행한 뒤 rake -T를 확인해보니 해당 rake 파일이 로드되지 않았습니다. 이것이 제 주요 걱정거리입니다. 프로덕션 환경에서 파일조차 테스트할 수 없습니다.

반면 로컬호스트에서는 문제가 없습니다. 파일을 lib/tasks로 복사해서 붙여넣기만 하면 정상적으로 작동합니다. 직접적인 접근이 필요한 상황에서 이 도커와 도커 컨테이너는 정말 골칫거리입니다. 게다가 rake 태스크 목록에 자동으로 로드되지 않는 이유조차 파악할 수 없습니다.

그래서 rake 파일이 자동으로 로드되지 않아 명령을 실행할 수 없으므로, 여전히 프로덕션 환경에서 막혀 있는 상태입니다.

제가 도커를 사용하지 않았다면 해당 사이트가 저를 지원하지 않았을 텐데, 그렇지 않았다면 도커를 제거하고 사이트를 직접 호스팅하는 것을 훨씬 더 기꺼이 받아들였을 것입니다. 그렇게 했다면 훨씬 더 수월했을 것입니다.

일반적으로 rake 작업은 개발 환경에서 테스트되며, 플러그인의 일부로 배포할 수 있습니다.

로컬에서 작동한다면, 거기서 백업한 후 프로덕션에 복원할 수 있습니다.

컨테이너 내 /var/www/discourse/lib/rake 디렉터리에 파일을 넣었나요?

문제는 로컬 백업을 라이브 사이트로 업로드하면 라이브 사이트에서 만든 모든 내용이 대체된다는 점입니다. 저는 로컬 인스턴스를 가지고 있지만, 이 포럼의 누군가가 라이브 사이트에서 개발을 하라고 조언했습니다. 그래서 현재는 라이브 사이트에서 개발을 하고 있습니다(아직 공식적으로 공개되지는 않았습니다).

그리고 파일을 lib/tasks에 넣었는데, 로컬 인스턴스에서는 작동하지만 라이브 인스턴스에서는 작동하지 않습니다. lib/rake도 시도해 볼 예정입니다.

라이브 사이트에서 직접 개발해서는 안 됩니다.

로컬에서 개발한 후, 변경 사항을 테마 컴포넌트 또는 플러그인으로 패키징하여 라이브 사이트에 배포해야 합니다.

플러그인에서 레이크(rake) 태스크를 사용하는 예시는 다음과 같습니다:

표준 설치 환경에서 Rails나 Ember를 개발해서는 안 된다고 생각합니다. 하지만 저는 정기적으로 프로덕션 컨테이너에서 가져오기(imports) 작업을 수행합니다. 이는 단순히 rake 태스크이기 때문에 변경 사항이 적용되도록 서버를 재시작할 필요도 없습니다.

사이트가 공개되어 있지 않으므로, 문제가 발생하면 백업으로 되돌리는 것이 안전할 것입니다. 아마도 저는 그렇게 할 것입니다.

라이브 사이트를 백업한 후 개발 사이트로 복원하고, 작업을 수행한 뒤 다시 라이브 사이트로 백업/복원하는 방식이 될 수 있습니다.