Ежедневные вызовы в Discourse

Сейчас я везу дочь в школу. А потом у меня сегодня утром несколько встреч. Мне потребуется время, чтобы разобраться.

1 лайк

Похоже, что некоторые столбцы базы данных могли быть перенесены некорректно. Эта версия добавила несколько новых столбцов в существующие таблицы. Попробуйте выполнить:

cd /var/discourse && ./launcher rebuild app

Использование кнопки «Обновить» в панели не применяет миграции базы данных — при добавлении новых столбцов плагином требуется полная пересборка.

Спасибо за терпение. Мы обязательно разберёмся!

1 лайк

На самом деле, можете ли вы сначала запустить это и опубликовать вывод?

./launcher enter app
su discourse -c 'cd /var/www/discourse && bundle exec rails runner "puts ActiveRecord::Base.connection.columns(\"daily_challenges\").map(&:name)"'
1 лайк
root@segredin-app:/var/www/discourse# su discourse -c 'cd /var/www/discourse && bundle exec rails runner "puts ActiveRecord::Base.connection.columns(\"daily_challenges\").map(&:name)"'
id
topic_id
hashtag
start_date
end_date
check_ins_needed
description
created_at
updated_at
final_post_sent
weekly_post_enabled
weekly_post_day
weekly_post_hour
award_badge
badge_name
badge_id
check_in_interval
week_start
category_id

Посмотрите на это

ActiveModel::UnknownAttributeError (неизвестный атрибут 'challenge_timezone' для DailyChallenge.) app/controllers/application_controller.rb:447:in 'block in ApplicationController#with_resolved_locale'

Похоже, у вас отсутствует столбец challenge_timezone в базе данных. Можете ли вы выполнить следующее:

./launcher enter app
su discourse -c 'cd /var/www/discourse && bundle exec rails runner "ActiveRecord::Base.connection.add_column(:daily_challenges, :challenge_timezone, :string, default: \"UTC\") unless ActiveRecord::Base.connection.column_exists?(:daily_challenges, :challenge_timezone)"'

Это должно добавить столбец. Я выясню, почему он не был добавлен, и обновлю файлы.

1 лайк

Ладно, осталось только подождать его исправления

ActiveModel::UnknownAttributeError (неизвестный атрибут 'challenge_timezone' для DailyChallenge.)
app/controllers/application_controller.rb:447:in 'block in ApplicationController#with_resolved_locale'
app/controllers/application_controller.rb:447:in 'ApplicationController#with_resolved_locale'
app/controllers/application_controller.rb:1098:in 'ApplicationController#ensure_dont_cache_page'
lib/middleware/omniauth_bypass_middleware.rb:35:in 'Middleware::OmniauthBypassMiddleware#call'
lib/middleware/crawler_hooks.rb:11:in 'Middleware::CrawlerHooks#call'
lib/content_security_policy/middleware.rb:12:in 'ContentSecurityPolicy::Middleware#call'
lib/middleware/anonymous_cache.rb:420:in 'Middleware::AnonymousCache#call'
lib/middleware/csp_script_nonce_injector.rb:12:in 'Middleware::CspScriptNonceInjector#call'
config/initializers/008-rack-cors.rb:14:in 'Discourse::Cors#call'
lib/middleware/default_headers.rb:13:in 'Middleware::DefaultHeaders#call'
config/initializers/100-quiet_logger.rb:20:in 'DiscourseRackQuietAssetsLogger#call'
config/initializers/100-silence_logger.rb:29:in 'SilenceLogger#call'
lib/middleware/enforce_hostname.rb:23:in 'Middleware::EnforceHostname#call'
lib/middleware/request_tracker.rb:321:in 'Middleware::RequestTracker#call'
lib/middleware/overload_protections.rb:22:in 'Middleware::OverloadProtections#call'
lib/middleware/processing_request.rb:14:in 'Middleware::ProcessingRequest#call'

Чтобы убедиться, что вы находитесь в нужной директории, сначала выполните:

cd /var/discourse && ./launcher enter app

Затем выполните:

su discourse -c 'cd /var/www/discourse && bundle exec rails runner "ActiveRecord::Base.connection.add_column(:daily_challenges, :challenge_timezone, :string, default: \"UTC\") unless ActiveRecord::Base.connection.column_exists?(:daily_challenges, :challenge_timezone)"'

После выполнения этой команды введите «exit», чтобы выйти из приложения.

Выполните полную перезагрузку страницы (Ctrl+Shift+R) и попробуйте снова. Если это не поможет, я через несколько минут внесу исправление.

Я на встрече. Скоро обновлю.

1 лайк

Я только что отправил обновление. Вы должны иметь возможность обновиться через панель администратора. Если это не сработает, возможно, вам придется выполнить:

./launcher rebuild app
1 лайк

Это работает

Друзья: Чендлер Бинг (Мэтью Перри) танцует

1 лайк

УРААА!!! Спасибо, что остались со мной и помогли мне во всём разобраться!!

Смешной мужчина танцует в пачке

1 лайк

Итак, следующие шаги включают новые функции? Я хочу предложить вам несколько идей.

Серии с монетами и значками, а также раздел для отслеживания собственной статистики.

В любом случае мне это очень нравится, и я жду продолжения :smiley:

1 лайк

Я сейчас работаю над этой частью. По сути, это будет «бот», который вы создадите (на самом деле просто учётная запись пользователя). Плагин будет отслеживать упоминания бота. Когда он их обнаружит, выполнит соответствующее действие. Например:

Имя бота: ChallengeBot

Кто-то вводит:

@ChallengeBot status

Бот отправит пользователю личное сообщение с его текущим статусом в челлендже.

У бота также будут и другие опции.

1 лайк

Как получить эту информацию, чтобы отобразить её в другом месте? Или сделать так, чтобы она появлялась в карточке пользователя? Если есть какой-то путь для этого, это было бы здорово.

v1.4.0 уже доступен!

В этом релизе добавлен ChallengeBot — опциональный бот-аккаунт, который внедряет функции вовлечения на основе личных сообщений (DM) в ваши челленджи.

Новое в этом релизе:

  • Подтверждение чекинга через DM — участники получают личное сообщение от ChallengeBot после каждого успешного чекина, где указано их текущее количество дней подряд и ссылка на тему челленджа.
  • Напоминания через DM — участники, которые не отмечались 2 и более дней подряд (для ежедневных челленджей) или не отметились к последнему дню недели (для еженедельных челленджей), получают мягкое напоминание от ChallengeBot. В сообщении указывается текущее количество чекинов и цель. Настройка доступна для каждого челленджа отдельно, по умолчанию включено.
  • Команды через @упоминание — участники могут упомянуть @ChallengeBot в любой активной теме челленджа, чтобы получить свои личные статистику через DM. Бот никогда не отвечает в самой теме. Доступные команды: status, leaderboard, streak, checkins, progress, help. Ограничение скорости: 10 команд на пользователя в час.
  • Посты с таблицей лидеров и финальными результатами — если ChallengeBot настроен, еженедельные посты с таблицей лидеров и посты с финальными результатами теперь отправляются от имени аккаунта бота, а не системного аккаунта.
  • Новая настройка сайтаdaily_challenge_bot_username
  • Новое поле для челленджа — переключатель для напоминаний через DM (по умолчанию включено)

Настройка ChallengeBot не обязательна — все существующие функции продолжают работать без него. Полные инструкции по настройке см. в основном посте: инструкции по настройке.

Примечание: В этом релизе включена миграция базы данных. Кнопка «Обновить» в панели управления применит её автоматически.

2 лайка

Отлично :smiley:

Возможно ли использовать эту опцию, если отправлять сообщение в ЛС или в теме? Кстати, я настроил @system как чат-бота.

CSS

.daily-challenge-dashboard {
    background-color: #1a1a1b;
    padding: 20px;
    border-radius: 8px;
    color: #d7dadc;
}

.d-page-subheader__title {
    color: #ffffff;
    font-size: 1.5rem;
    margin-bottom: 15px;
    border-bottom: 1px solid #343536;
    padding-bottom: 10px;
}

.d-stat-tiles.fcd-stats {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 12px;
    margin-bottom: 30px;
}

.d-stat-tile {
    background-color: #272729;
    border: 1px solid #343536;
    padding: 15px;
    border-radius: 8px;
    transition: border-color 0.2s;
}

.d-stat-tile:hover {
    border-color: #818384;
}

.d-stat-tile__label {
    color: #818384;
    font-size: 0.75rem;
    text-transform: uppercase;
    font-weight: 700;
    letter-spacing: 0.5px;
}

.d-stat-tile__value {
    display: block;
    font-size: 1.8rem;
    font-weight: 600;
    color: #ff4500;
}

.fcd-leaderboard__table {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0 8px;
}

.fcd-leaderboard__table thead th {
    color: #818384;
    font-size: 0.7rem;
    text-transform: uppercase;
    padding: 0 15px 5px 15px;
    text-align: left;
}

.fcd-leaderboard__row {
    background-color: #272729;
    transition: transform 0.1s ease;
}

.fcd-leaderboard__row td {
    padding: 12px 15px;
    border-top: 1px solid #343536;
    border-bottom: 1px solid #343536;
}

.fcd-leaderboard__row td:first-child {
    border-left: 1px solid #343536;
    border-top-left-radius: 8px;
    border-bottom-left-radius: 8px;
}

.fcd-leaderboard__row td:last-child {
    border-right: 1px solid #343536;
    border-top-right-radius: 8px;
    border-bottom-right-radius: 8px;
}

.fcd-leaderboard__row:hover {
    background-color: #2d2d2e;
}

.fcd-rank {
    width: 24px;
    height: 24px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    font-weight: bold;
    font-size: 0.8rem;
}

.fcd-rank--gold { background: #ffd700; color: #000; box-shadow: 0 0 10px rgba(255, 215, 0, 0.3); }
.fcd-rank--silver { background: #c0c0c0; color: #000; }

.fcd-streak-icon {
    color: #ff4500;
    filter: drop-shadow(0 0 3px rgba(255, 69, 0, 0.5));
    animation: pulse 2s infinite;
}

@keyframes pulse {
    0% { transform: scale(1); opacity: 1; }
    50% { transform: scale(1.1); opacity: 0.8; }
    100% { transform: scale(1); opacity: 1; }
}

.fcd-progress {
    height: 8px;
    background-color: #343536;
    border-radius: 4px;
    overflow: hidden;
    width: 100px;
    display: inline-block;
    vertical-align: middle;
    margin-right: 8px;
}

.fcd-progress__bar {
    background: linear-gradient(90deg, #ff4500, #ff8c00);
    height: 100%;
    border-radius: 4px;
}

.fcd-progress__label {
    font-size: 0.8rem;
    color: #d7dadc;
    font-weight: bold;
}

.fcd-leaderboard__user img {
    border-radius: 50%;
    border: 2px solid #343536;
    margin-right: 10px;
}