我们有一个问题,因为我们把项目的依赖性从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)
ruby进程似乎处于空闲状态,没有使用CPU。
我意识到,通过运行 rails assets:precompile
在运行服务器之前,即使我删除了publicassets和publicpacks目录下的预编译资产,它也不会再挂起。
我可以通过以下方法重现它。
tmp/cache
我们可以在至少3台开发机器和CI服务器上重现这个问题。
在 rails 4.2 分支中,我们没有这个问题,而且我们有相同版本的 Webpacker(4.2.2)。
rails 4.2 分支和 5.2 分支在资产方面的主要区别在于从 sprockets 3.7 升级到了 4.0,同时还有其他所有的依赖性变化。
我被困在调试中,希望得到一些帮助,如何进一步调试这个问题,获得更多的输出到日志等。
更新: 我在gemfile中禁用了webpacker,但它还是会冻结。
更新#2: 在链轮上发现一个相关问题。https:/github.comrailssprocketsissues640。 . 我相信这和我的问题是一样的。
这个问题似乎在添加:
if Rails.env.development? || Rails.env.test?
Sprockets.export_concurrent = false
end
加到 application.rb
根据 https:/github.comrailssprocketsissues640。在Sprockets中存在一个可能发生死锁的bug,这是一个变通的修复方法。