ruby-on-rails - Rails Assets 管道并从 nginx 提供静态文件

标签 ruby-on-rails nginx unicorn

我正在尝试从我的 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/

相关文章:

ruby-on-rails - ruby 排序数组的数组

node.js - 使用 2 个 Express 应用程序阻止私有(private)端口 NGINX 反向代理

ruby-on-rails - Capistrano 从旧版本中给出错误。 ActionView::MissingTemplate

Meteor Mupx 与 Nginx 反向代理

ruby-on-rails - master 启动失败,查看 stderr 日志了解详情

nginx - POST 请求变成 GET 请求

ruby-on-rails - Rails 嵌套表单排序

javascript - 如何在加载下一页之前保持远程表单上的提交按钮处于禁用状态

ruby-on-rails - 优点和缺点 - Ruby on Rails

linux - 在没有 IP SAN 的情况下使用带有 SSL 证书的 Docker 注册表