Как исправить «круговую зависимость при загрузке постоянной» в многопоточном приложении rails4.2? - PullRequest
0 голосов
/ 10 ноября 2019

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

ActiveSupport::Dependencies.interlock.permit_concurrent_loads

ссылка на руководство

Пример в руководстведля Rails 5, как я могу добиться этого в Rails 4.2? Я не могу найти файл interlock.rb в каталоге active_support/dependencies.

Ожидаемое поведение

  futures = @current_user.posts.map do |p|
      Concurrent::Promises.future(p) do |post|
        ActiveRecord::Base.connection_pool.with_connection do
          post.cleanup_comments # Calls an API which takes ~2minutes
          post.destroy
        end
      end
    end

    responses = futures.map(&:value)

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

Фактическое поведение

Когда я выполняю этот код, я получаю: Circular dependency detected while autoloading constant ошибка. Я искал в интернете и понял, что эта проблема возникнет только в средах разработки, поэтому я смог решить эту проблему, поместив эти две строки в мой файл config/application.rb, но я не уверен, что это правильный способ решения этого циркулярапроблема взаимоблокировки зависимостей.

config.cache_classes = true
config.eager_load = true

Может кто-нибудь подсказать мне, как написать код без взаимоблокировок в Rails4.2, который работает как в среде разработки, так и в рабочей среде?

Конфигурация системы

Версия Rails : rails -v # Rails 4.2.8

Версия Ruby : ruby ​​-v # ruby ​​2.3.4p301 (2017-03-30ревизия 58214) [x86_64-darwin18]

PS: я задавал этот вопрос по проблемам Rails GitHub , но не смог найти никакого решения.

...