Назначить пользователям случайное время дайджеста?

Недавно я мигрировал форум phpBB с примерно 1400 пользователями на Discourse. За исключением нескольких аккаунтов, все дайджесты отправляются начиная с 8:00 утра. Есть ли способ назначить пользователям случайное время в диапазоне от 00:00 до 23:00?

– Geoff

Я не знаю, но мне сказали (от ИИ):

https://ask.discourse.com/discourse-ai/ai-bot/shared-ai-conversations/wisnZ2lMtzSY1ji_QM8BiA

Клик-сейвер: нет, если бы ИИ знал и не галлюцинировал.

Я думаю, что вы могли бы изменить user_stats.digest_attempted_at для всех ваших пользователей на случайное значение. Возможно, вы добавите от 0 до 24 часов к текущему значению user_stats.digest_attempted_at.

Вот что я, в общем-то, и предполагал, что мне придётся делать. Однако я привык к среде общих серверов, где есть сервер баз данных, к которому можно подключиться удалённо. Я отлично знаю SQL, но совершенно не понимаю, как подключиться к базе данных на Droplet от DigitalOcean. Буду очень признателен за любые подсказки.

Вы хотите сделать это через Rails, а не изменять базу данных напрямую.

Но вы можете

./launcher enter app
su - postgres
psql discourse

и приступить к делу.

Вы можете посмотреть Административные массовые операции и, думаю, найти примеры, похожие на

users = User.where(something)
users.each do |user|
   user.update(field: value)
end

Большое спасибо за подсказки. Я решил, что делать это через Rails — слишком крутая кривая обучения, поэтому разобрался, как сделать это через PostgreSQL. Вот моё решение:

./launcher enter app
su - postgres 
psql discourse
UPDATE user_stats SET digest_attempted_at = digest_attempted_at - interval '1' DAY * random();

Мне кажется, всё верно.

В данном случае это достаточно безопасно. Я понимаю подход «используй то, что знаешь», но Rails предоставляет множество защитных механизмов (обеспечивает соблюдение правил, поддерживает связь между таблицами и так далее).

Рад, что вы всё решили!

Проверив логи электронной почты, вижу, что теперь всё распределено равномерно. Спасибо за помощь!