Rails 5.2服务器在没有预编译assets时挂起。

问题描述 投票:3回答:1

我们有一个问题,因为我们把项目的依赖性从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。 . 我相信这和我的问题是一样的。

ruby-on-rails assets sprockets webpacker
1个回答
3
投票

这个问题似乎在添加:

if Rails.env.development? || Rails.env.test?
  Sprockets.export_concurrent = false
end

加到 application.rb

根据 https:/github.comrailssprocketsissues640。在Sprockets中存在一个可能发生死锁的bug,这是一个变通的修复方法。

© www.soinside.com 2019 - 2024. All rights reserved.