我正在尝试从我的 Rails 应用程序访问文件 logo.png。在部署过程中,/app/assets 中的所有内容都会被编译并放入/public/assets 中。例如,我的文件名为 logo.png 如下所示:
/public/assets/logo-e66eddecdb08ac2b7fe349da2a065d87.png
当我尝试访问完整的文件名时,nginx 成功地直接提供了它,因为/etc/sites-enabled/myapp 中的这些行:
try_files $uri/index.html $uri @unicorn;
root /home/deployer/apps/myapp/current/public
所以我可以浏览到 myserverhost.com/assets/logo-e66eddecdb08ac2b7fe349da2a065d87.png 并且它加载正常。然而,当然,在我的应用程序中,我将该文件简单地引用为“logo.png”,当我加载主页时,我收到了在 logo.png 上找不到的 404 错误。
nginx 如何知道文件名已与末尾的哈希值混合在一起?
编辑:我在我的 scss 文件中引用了这样的 Logo 文件:
#sidebar .logo-div {
border-bottom: 2px solid#ddd;
width:100%;
height:80px;
text-align:center;
background-image:url('logo.png');
background-position:center;
background-repeat:no-repeat;
margin-bottom:20px;
}
最佳答案
您必须使用网址助手。
背景图片:url(image-path("logo.png"));
或者
asset-url("logo.png", 图片)
Rails 会自动在生产环境中添加哈希值。
关于ruby-on-rails - Rails Assets 管道并从 nginx 提供静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22790319/