레일즈 콘솔(그리고 API)을 통해 이를 수행할 수는 있지만, 그렇게 해야 하는지 신중하게 고려해 보시는 것이 좋습니다. 사용자가 의도적으로 특정 카테고리(또는 태그나 토픽)를 '감시’하거나 '음소거’하도록 선택했다면, 그 선택을 무시하는 것은 바람직하지 않을 가능성이 큽니다. 또한 사용자가 원상태로 되돌릴 수 있으므로, 이를 통해 얻을 수 있는 이점이 없을 수도 있습니다.
아이디어는 새로운 기본 설정(특정 카테고리 관찰)을 되돌린 후, 사람들이 원하는 대로 설정을 변경할 수 있도록 하는 것입니다.
방금 위에서 언급한 User.all.each do |user| CategoryUser.batch_set(user, :watching, [<id>]) end 명령이 모든 사용자의 설정을 변경하는 데 제대로 작동하지 않는 것 같습니다. 이유가 무엇일까요? 더 나은 방법은 새로운 추적 설정을 기존 사용자 추적 설정에 추가하는 것입니다…
P.S. 저희는 작은 커뮤니티이고, 설정을 조정할 시간을 낸 사람은 그중에서도 훨씬 더 적은 비율이라는 것을 알고 있습니다 (
저도 명령어를 시도하기 전에 정확히 이렇게 해보았습니다. 하지만 두 가지를 모두 수행한 후에도 Announcements에 새 게시글이 올라가면 일부 사용자만 이메일을 받는 상태입니다.
이전에 링크된 관련 이슈에서 설명된 바와 같이 digest 이메일에 “사소한” 활동(즉, Announcements 게시글 없음)만 포함되어 있어, 사용자가 이메일 알림을 구독 해제했을 가능성이 있습니다.
해결책을 마련하기 전에 조금 더 자세한 정보가 필요합니다. category_users 테이블은 활성 카테고리 알림 수준에 대한 기록만 보관하므로, 사용자가 해당 설정을 가지고 있지 않으면 rails 콘솔을 통해 수정할 데이터가 테이블에 존재하지 않습니다. (예를 들어, default categories watching 관리자 설정에 #contribute:site-feedback을 추가하면 각 사용자에게 category_users 테이블에 기록이 추가되고, 설정을 초기화하면 해당 기록이 다시 삭제됩니다.)
확인해 보았는데, User.all.each do |user| CategoryUser.batch_set(user, :watching, [22]) 실행 후 모든 사용자의 추적 설정이 원하는 카테고리(22 | Announcements)를 관찰(watch)하도록 변경되었습니다. 해당 쿼리는 모든 사용자를 나열합니다:
SELECT *
FROM category_users
WHERE category_id = '22' AND notification_level = '3'
그리고 이 쿼리는 사용자 1명만 나열합니다:
SELECT *
FROM user_options uo
WHERE uo.email_level = '2'
그런데 왜 카테고리 22 "Announcements"에 새 게시글이 올라와도 많은 사용자에게 이메일이 전송되지 않는지 궁금합니다.
P.S. SQL 쿼리를 이것저것 시도해 보고 있지만, 두 쿼리를 어떻게 조인(join)해야 할지 모르겠습니다.
혹시 모르니 말씀드리는데, 저는 여전히 이 문제를 조사하고 해결책을 찾고 있습니다. 특정 카테고리(‘Announcements’)를 기본 설정으로 구독하고 있지만 새 게시물에 대한 이메일 알림을 받지 않는 사용자 중 한 명의 설정을 분리(isolate)하여 확인해 보았습니다:
user
mailing_list_mode
email_digests
external_links_in_new_tab
enable_quoting
dynamic_favicon
automatically_unpin_topics
digest_after_minutes
auto_track_topics_after_msecs
new_topic_duration_minutes
last_redirected_to_top_at
email_previous_replies
email_in_reply_to
like_notification_frequency
mailing_list_mode_frequency
include_tl0_in_digests
notification_level_when_replying
theme_key_seq
allow_private_messages
homepage
theme_ids
hide_profile_and_presence
text_size_key
text_size_seq
email_level
email_messages_level
title_count_mode_key
enable_defer
timezone
enable_allowed_pm_users
dark_scheme
skip_new_user_tips
color_scheme
default_calendar
oldest_search_log_date
chat_enabled
only_chat_push_notifications
chat_sound
dismissed_channel_retention_reminder
dismissed_dm_retention_reminder
bookmark_auto_delete_preference
ignore_channel_wide_mention
chat_email_frequency
enable_experimental_sidebar
seen_popups
chat_header_indicator_preference
sidebar_link_to_filtered_list
sidebar_show_count_of_new_items
watched_precedence_over_muted
chat_separate_sidebar_mode
topics_unread_when_closed
show_thread_title_prompts
JohnDoe
false
true
true
true
false
true
10080
240000
2880
2023-06-13T08:25:13.000Z
1
false
1
1
true
2
0
true
NULL
{}
false
0
0
1
1
0
false
Europe/Somwhere
false
NULL
false
NULL
0
NULL
true
NULL
NULL
NULL
NULL
3
NULL
1
false
{1,2,3,4,5}
0
false
false
NULL
0
true
true
‘Announcements’ 카테고리를 구독하는 사용자를 조회했을 때 이 사용자의 레코드(row)가 다음과 같기 때문에, 왜 이런 문제가 발생하는지 정말로 이해가 가지 않습니다:
id
category
user
notification_level
last_seen_at
123
Announcements
JohnDoe
3
NULL
제가 놓치고 있는 다른 설정이 있을까요? 혹시 사용자가 알림 이메일 중 하나에서 구독 취소(unsubscribe)를 클릭하여 이메일 설정이 변경된 것일까요?
사용자가 “<category_name> 카테고리의 모든 주제 보기 중지” 또는 “Discourse에서 이메일을 보내지 마세요” 옵션을 선택했다면, 사용자의 설정 페이지에서 해당 변경 사항을 확인할 수 있습니다. 카테고리 목록에서 해당 카테고리가 삭제되었거나, 이메일 페이지의 모든 설정이 "절대 보내지 않음"으로 변경되어 있을 것입니다.
사용자가 “이 주제 보기 중지” 옵션을 선택한 경우 변경 사항을 확인하기가 더 어렵습니다. 이 경우, 관리자 페이지에서 해당 사용자로 위장하여 주제를 방문한 후, 해당 주제에 대한 알림 수준이 "주시 중(watching)"에서 "추적(tracking)"으로 변경되었는지 확인해 보세요. 또한 Rails 콘솔을 통해 해당 주제에 대한 사용자의 알림 수준 정보도 가져올 수 있습니다:
이 부분에 너무 몰두하기 전에, 사이트의 “이메일 건너뜀 로그(Skipped Email Logs)” 페이지로 가세요. 관리자 사이드바에서 해당 페이지로 이동할 수 있습니다. 페이지 상단의 “수신 주소(To Address)” 필드에 사용자의 이메일 주소를 입력하면, 해당 이메일이 사용자에게 발송되지 않은 이유에 대한 세부 정보를 확인할 수 있습니다.
"기본 카테고리 구독"이라는 사이트 설정이 있습니다. 이 설정을 변경하면 과거 데이터에도 적용할지 묻는 옵션이 제공됩니다. 해당 옵션을 선택하면 해당 카테고리에 대해 설정 페이지에서 명시적으로 설정을 변경한 사용자를 제외한 모든 사용자의 환경설정이 업데이트됩니다. 이것이 바로 회피하려는 문제인 것 같습니다. Rails 콘솔을 통해 처리할 수도 있지만, 가능한 한 그 접근 방식을 피하는 것이 좋습니다.
대신 공지사항을 위한 새 카테고리를 생성하고, 이 카테고리를 사이트의 “기본 카테고리 구독” 설정에 추가할 수 있습니다. 그런 다음 기존 공지사항 카테고리에서 새 카테고리로 주제를 이동하여 사이트를 정리할 수 있습니다. 카테고리 이름을 "announcements"로 유지하려면, 먼저 원래의 “announcements” 카테고리를 다른 이름으로 변경하는 것부터 시작하세요. 이 방법은 다소 임시방편(hack)에 가깝지만, Rails 콘솔을 건드리지 않고 문제를 해결하는 방법입니다.