gpt4 book ai didi

ruby-on-rails - unicorn 服务时,Rails 为预编译 Assets 生成错误的指纹

转载 作者:行者123 更新时间:2023-12-03 18:03:46 25 4
gpt4 key购买 nike

我有一个带有 nginx -> unicorn -> rails 的生产服务器。我预编译 Assets ,将 Assets 放入公共(public)/ Assets 中,并在文件名上附加指纹(哈希)。但是,当请求网页时,对 application.css 和 application.js Assets 的引用将具有错误的指纹。例如,rails helper stylesheet_link_tag 将生成一个文件名,该文件名在服务器上的 public/assets 中不存在,因为请求的指纹与预编译的指纹不匹配。图像 Assets 工作正常(指纹匹配)。

为了解决这个问题,我在本地机器上预编译了 Assets ,指纹与我服务器上的预编译指纹匹配。此外,在生产模式下使用 webrick 在本地运行时,一切正常。然后我尝试在我的服务器上运行 webrick,这很有效,让我认为 unicorn 是问题的根源。

我通过使用 --no-default-middleware(或 -N)选项启动 unicorn 解决了这个问题,这使得 unicorn 在预编译 Assets 方面表现如预期。我的理解是,这告诉 unicorn 不要加载默认的一组 Rack 中间件,否则它会加载。但是,我真的不明白为什么这可以解决问题,或者首先出了什么问题。到底是怎么回事?

一些细节:Ubuntu 12.04、Rails 4.0.1、Ruby 2.1.0、带有第三方主题的 bootstrap 3.0

更新:

我不认为这是一个 nginx 问题的原因是,当我从浏览器请求页面,然后查看源代码时,application.css 文件的文件名有指纹,所以它实际上看起来像 application-3855b1928b94aa5bff5e1dac1aa56882。 css。这与我服务器上文件的真实指纹不匹配。我确信服务器上的指纹是正确的,因为我在本地开发机器上得到了相同的指纹。所以客户端正在加载网页,然后向服务器请求 .css 文件...nginx 收到该请求,但找不到 .css 文件,因为它实际上不存在,所以 nginx 的行为符合预期.

指纹会生成两次:一次是在我预编译 Assets 时,它工作正常(非常肯定),并且在没有 unicorn 参与的情况下发生。第二次,当一个 unicorn worker 的上下文中的 rails 看到 stylesheet_link_tag 帮助器并在运行中计算指纹时(我认为这就是它正在做的事情),由于某种原因生成了不正确的指纹。如果我在完全相同的服务器上用 webrick 替换 unicorn,也会发生同样的过程,但在这种情况下指纹匹配。如果我用 -N 标志启动 unicorn ,指纹匹配,但我不知道为什么这会有所不同,我也不知道为什么其他人似乎不必这样做。

最佳答案

一个疯狂的猜测:检查 Unicorn 是否真的在您的服务器上的生产环境中运行。

关于ruby-on-rails - unicorn 服务时,Rails 为预编译 Assets 生成错误的指纹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23647468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com