최근 약 1,400명의 사용자가 있는 phpBB 포럼을 Discourse로 이관했습니다. 소수의 계정을 제외하고, 모든 다이제스트가 오전 8시부터 발송되는 것 같습니다. 사용자에게 00:00에서 23:00 사이의 무작위 시간을 할당할 수 있는 방법이 있을까요?
– Geoff
최근 약 1,400명의 사용자가 있는 phpBB 포럼을 Discourse로 이관했습니다. 소수의 계정을 제외하고, 모든 다이제스트가 오전 8시부터 발송되는 것 같습니다. 사용자에게 00:00에서 23:00 사이의 무작위 시간을 할당할 수 있는 방법이 있을까요?
– Geoff
모르겠지만 (AI에게) 들은 바로는:
https://ask.discourse.com/discourse-ai/ai-bot/shared-ai-conversations/wisnZ2lMtzSY1ji_QM8BiA
클릭 절약: 아니요, AI가 알고 있었지만 환각(hallucination)이 아니라면.
user_stats.digest_attempted_at 값을 모든 사용자에게 대해 랜덤 값으로 수정할 수 있을 것 같습니다. 예를 들어 현재 user_stats.digest_attempted_at 값에 0~24시간을 더하는 방식이죠.
대충 이런 식으로 해야 한다는 걸 예상하고 있었습니다. 다만 저는 데이터베이스 서버에 원격으로 연결할 수 있는 공유 서버 환경을 주로 사용했습니다. SQL에는 아주 능숙하지만, DigitalOcean 드롭렛에서 데이터베이스에 어떻게 연결해야 하는지 막막합니다. 어떤 힌트라도 주시면 정말 감사하겠습니다.
데이터베이스를 직접 수정하는 대신 Rails를 통해 작업을 수행하고 싶으시군요.
하지만 아래 방법으로 진행할 수도 있습니다.
./launcher enter app
su - postgres
psql discourse
그리고 작업을 수행하세요.
Administrative Bulk Operations를 참고하시면, 다음과 같은 예시를 찾을 수 있을 것입니다.
users=User.where(something)
users.each do |user|
user.update(field: value)
end
유용한 조언을 주셔서 정말 감사합니다. Rails를 통해 진행하는 것이 학습 곡선이 너무 가파르다고 판단하여, postgres를 통해 수행하는 방법을 찾아냈습니다. 제가 찾은 해결책은 다음과 같습니다:
./launcher enter app
su - postgres
psql discourse
UPDATE user_stats SET digest_attempted_at = digest_attempted_at - interval '1' DAY * random();
나도 맞다고 생각해.
이건 이 정도면 충분히 안전할 것 같아. 아는 대로 진행하는 방식을 이해하지만, Rails는 많은 보호 기능을 제공해 주거든 (제어 사항이 제대로 강제되고 테이블 간 연결이 유지되는지 등을 확인해 주는 식으로).
잘 해결했구나!
이메일 로그를 확인해 보니, 이제 모든 것이 고르게 분포되어 있습니다. 도움 주셔서 감사합니다!