ask.discourse.org에서 좋은 출발점을 레일스 스크립트로 제시했습니다:
MAX_MESSAGES = 1000 # 테스트를 위한 선택적 제한
SECONDS_BETWEEN_MESSAGES = 3 # 3초 간격
Rails.logger.info "대량 메시지 스크립트를 시작합니다..."
# 메시지 내용을 정의합니다
message_title = "우리 커뮤니티에 오신 것을 환영합니다"
message_body = "안녕하세요! 여러분을 이곳에 모실 수 있어 정말 기쁩니다. 궁금한 점이 있으시면 알려주세요!"
# 마지막 접속 시간 순으로 사용자 가져오기
users = User.where(active: true)
.where.not(staged: true) # 임시 사용자 제외
.order(last_seen_at: :desc)
.limit(MAX_MESSAGES)
Rails.logger.info "메시지를 보낼 활성 사용자 #{users.count}명을 찾았습니다."
users.each_with_index do |user, index|
begin
Rails.logger.info "#{user.username}에게 메시지 대기열에 추가 중 (#{index + 1}/#{users.count})..."
PostCreator.create!(
Discourse.system_user,
title: message_title,
raw: message_body,
archetype: Archetype.private_message,
target_usernames: user.username,
skip_validations: true
)
Rails.logger.info "#{user.username}에게 메시지 대기열에 성공적으로 추가했습니다."
# 다음 사용자를 처리하기 전에 지정된 간격만큼 대기
sleep(SECONDS_BETWEEN_MESSAGES)
rescue => e
Rails.logger.error "#{user.username}에게 메시지 전송 실패: #{e.message}"
end
end
Rails.logger.info "대량 메시지 스크립트 완료!"
어떤 수정도 하지 않았고, system 사용자가 제 테스트 인스턴스의 모든 사용자에게 개인 메시지를 보냈습니다:
사용자가 몇 명이나 되나요?

