如何在多线程rails4.2应用程序中修复“加载常量时的循环依赖性”? 预期行为实际行为系统配置

在编写多线程应用程序时,建议启用并发加载以避免自动加载期间的死锁。

activeSupport::Dependencies.interlock.permit_concurrent_loads

link to guide

指南中的示例适用于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 -v#Rails 4.2.8

Ruby版本:ruby -v#ruby 2.3.4p301(2017-03-30修订版58214)[x86_64-darwin18]

PS:我在Rails GitHub issues上问了这个问题,但没有任何解决方法。

laonongding 回答:如何在多线程rails4.2应用程序中修复“加载常量时的循环依赖性”? 预期行为实际行为系统配置

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3128134.html

大家都在问