# Странная ошибка миграции в тестах во время GH workflow

**URL:** <https://meta.discourse.org/t/strange-migration-error-in-tests-during-gh-workflow/287022>\
**Category:** Development\
**Created:** [29.Ноябрь.2023 23:18:11 UTC](https://meta.discourse.org/t/strange-migration-error-in-tests-during-gh-workflow/287022 "2023-11-29T23:18:11Z")\
**Posts on this page:** 1\
**Showing post:** 3

<div class="post-metadata">

**Author:** ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)\
**Post date:** [30.Ноябрь.2023 00:03:59 UTC](https://meta.discourse.org/t/strange-migration-error-in-tests-during-gh-workflow/287022/3 "2023-11-30T00:03:59Z")

</div>

Совет от Rubocop хорош, но я не думаю, что он является причиной этой ошибки. (Упомянутый им «риск» касается блокировок в таблицах с высокой нагрузкой, что влияет на продакшн-трафик. Это не то, что могло бы вызвать ошибки в тестовой среде.)

Вы, вероятно, сможете воспроизвести ту же ошибку локально, выполнив команду `RAILS_ENV=test bin/rake db:drop db:create db:migrate` (то есть миграцию базы данных с нуля с включённым плагином locations).

Я подозреваю, что проблема в том, что вы [вызываете задачи Rake внутри миграции](https://github.com/paviliondev/discourse-locations/blob/2c5fe46038326c72ae7160d9d6d204080980ebb4/db/migrate/20231128010101_populate_locations_tables.rb#L4-L5). В ядре Discourse мы обычно избегаем выполнения любого кода приложения внутри миграций из-за возможных странных побочных эффектов. Лучше использовать сырой SQL.

В данном случае я предполагаю, что кэш схемы ActiveRecord заполняется на раннем этапе миграции (когда `topics.off_topic_count` ещё существует). Затем, когда запускается ваша задача Rake, она работает со старым кэшем схемы, и поэтому ActiveRecord пытается загрузить столбцы, которые больше не существуют.

Вы, вероятно, сможете смягчить проблему, добавив `ActiveRecord::Base.clear_cache!` перед вызовом задач Rake… но не воспринимайте это как рекомендацию 😉. Лучшее решение — вообще не вызывать задачи Rake. Если вам нужно манипулировать данными в базе данных, используйте сырой SQL внутри миграции.

---

_[View the full topic](https://meta.discourse.org/t/strange-migration-error-in-tests-during-gh-workflow/287022)._
