自从我们将项目的依赖项从rails 4.2升级到rails 5.2以来,我们遇到了一个问题
我们同时使用Sprockets资产和Webpacker。首次启动服务器并加载第一页(任何页面(时,它会在提供页面内容之前挂起。
它通常挂在这样的一行上,没有其他输出:
I, [2020-05-15T10:28:20.828146 #66077] INFO -- : [fd7f1413-7d72-402f-92f9-95688e7fa50e] Rendered partials/_front_page_featured_items.html.haml (172.4ms)
红宝石进程似乎处于空闲状态,没有使用 CPU。
我意识到,通过在运行服务器之前运行rails assets:precompile
,即使我删除了 public/assets 和 public/packs 目录中的预编译资产,它也不会再挂起了。
我可以通过以下方式重现它:
- 删除
tmp/cache
的内容
我们可以在至少 3 台开发机器和 CI 服务器上重现这一点。
在 rails 4.2 分支中,我们没有这个问题,我们有相同版本的 Webpacker (4.2.2(。
rails 4.2分支和 5.2 在资产方面的主要区别在于从 sprockets 3.7 升级到 4.0,以及所有其他依赖项更改。
我无法调试此问题,并希望在如何进一步调试此问题、获得更多日志输出等方面提供帮助。
更新:我在 gemfile 中禁用了网络打包程序,但它仍然冻结
更新#2:在链轮上发现了一个相关问题:https://github.com/rails/sprockets/issues/640。我相信这与我遇到的问题相同。
添加以下内容后,该问题似乎已得到解决:
if Rails.env.development? || Rails.env.test?
Sprockets.export_concurrent = false
end
到application.rb
根据 https://github.com/rails/sprockets/issues/640 的说法,Sprockets 中存在一个错误,可能会发生死锁,这是一个解决方法。