Rails资产管道和从nginx提供静态文件

时间:2014-04-01 15:29:57

标签: 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文件中引用了这样的徽标文件:

#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;
}

2 个答案:

答案 0 :(得分:2)

您必须使用网址助手。

background-image: url(image-path("logo.png"));

asset-url("logo.png", image)

Rails会自动在生产中添加哈希值。

答案 1 :(得分:0)

如果您的文件是css文件:

background-image: url(/assets/logo.png);

如果您的文件是sass文件,则可以使用帮助程序:

background-image: image-url("logo.png");