У меня возникла проблема: недавно добавленный шаг «Проверка возможности загрузки SKIP_DB_AND_REDIS» не удался для одного из моих плагинов.
Загрузка с SKIP_DB_AND_REDIS не удалась. Убедитесь, что во время процесса загрузки Rails нет обращений к базе данных.
Чтобы воспроизвести проблему локально, выполните SKIP_DB_AND_REDIS=1 RAILS_DB='nonexistent' bin/rails runner "puts 'booted successfully'".
Я попробовал это сделать, но не смог воспроизвести проблему локально — всё прошло успешно.
Я мог бы использовать стек-трейс из неудачного шага действия GitHub, чтобы точно определить, какой код стал причиной проблемы.
Проблемный код
В одном из моих контроллеров я объявил константу, которая получала список атрибутов активной записи:
REWARD_FIELDS = Reward.attribute_names.excluding("id", "created_at", "updated_at")
Как выяснилось, так делать не следует.
Но было бы удобнее, если бы я мог симулировать эту проверку локально, чтобы не пришлось прибегать к методу проб и ошибок через действия GitHub. Значит, должно быть что-то ещё, кроме выполнения:
SKIP_DB_AND_REDIS=1 RAILS_DB='nonexistent' bin/rails runner "puts 'booted successfully'"
david
(David Taylor)
08.Июнь.2026 15:09:17
3
Интересно, спасибо за сообщение!
Это довольно специфичная деталь, которую мы, вероятно, ранее не учитывали.
Попробуйте изменить эту строку на false в вашей локальной установке:
А затем снова выполните команду для воспроизведения проблемы?
Если это успешно воспроизведёт проблему, то стоит рассмотреть возможность добавления переменной окружения для управления настройкой schema_cache_dump.
Это не имело эффекта. Не помогло и удаление файла db/schema_cache.yml.
david
(David Taylor)
09.Июнь.2026 18:08:09
7
Пожалуйста, попробуйте следующие два варианта:
Режим разработки с использованием другой переменной окружения для настройки базы данных:
SKIP_DB_AND_REDIS=1 DISCOURSE_DEV_DB='nonexistent' bin/rails runner "puts 'booted successfully'"
В режиме тестирования с загруженными плагинами:
LOAD_PLUGINS=1 RAILS_ENV=test SKIP_DB_AND_REDIS=1 RAILS_DB='nonexistent' bin/rails runner "puts 'booted successfully'"
Нет, всё ещё успешно.
Чтобы проверить, что код плагина загружен, я использовал “puts DiscourseKofi::Engine.to_s”, и он вывел имя. Но когда я обратился к классу, который создаёт подключение к базе данных “puts DiscourseKofi::Admin::AccountsController.to_s”, в итоге произошла ошибка.
Похоже, что локально код плагина не загружается полностью, как это происходит в GitHub Action.
Полная команда, вызвавшая ошибку:
LOAD_PLUGINS=1 SKIP_DB_AND_REDIS=1 DISCOURSE_DEV_DB=nonexistent bin/rails runner "puts DiscourseKofi::Admin::AccountsController.to_s"
Без LOAD_PLUGINS=1 или с использованием RAILS_DB=nonexistent ошибка не возникала.
Исправление: LOAD_PLUGINS не имел значения.
Таким образом, это приведёт к сбою:
SKIP_DB_AND_REDIS=1 DISCOURSE_DEV_DB=nonexistent bin/rails runner "puts DiscourseKofi::Admin::AccountsController.to_s"
-> сбой
А это — нет:
SKIP_DB_AND_REDIS=1 DISCOURSE_DEV_DB=nonexistent bin/rails runner "puts 'booted successfully'"
-> сбоев нет
То же самое с обращением к классу, который не обращается к базе данных:
SKIP_DB_AND_REDIS=1 DISCOURSE_DEV_DB=nonexistent bin/rails runner "puts DiscourseKofi::Admin::PaymentsController.to_s"
-> сбоев нет
Понял. Правильная команда для воспроизведения проблемы локально:
CI=true RAILS_ENV=test LOAD_PLUGINS=1 SKIP_DB_AND_REDIS=1 RAILS_DB=nonexistent bin/rails runner "puts 'booted successfully'"
Все эти переменные окружения важны. У меня не получилось запустить это в режиме RAILS_ENV=development. Без CI=true и LOAD_PLUGINS=1 в режиме test похоже, что не все классы плагинов загружаются.