4

我最近将我的应用程序部署到了 heroku,除了在 jquery-raty 中定义的图像之外,一切都运行良好。基本上,这个 gem 可以让你轻松地实现一个评级系统(视觉上)。

当我推送到 heroku 资产时,我可以看到我指定用于 jquery-raty 的图像已成功编译并且名称已更改(即,image.png 变为 image-f96e0d1182b422c912116f08ac8f7d78.png)。一切都很好 - 但我发现当部署到 heroku 时,这个新名称没有反映出来。也就是说,图像正试图从https://myapp.herokuapp.com/assets/image.png而不是https://myapp.herokuapp.com/assets/image-f96e0d1182b422c912116f08ac8f7d78.png中提取。

这是我的问题——目前我不知道如何正确指向网址。

有没有其他人找到解决方案?

谢谢你。

4

3 回答 3

3

您基本上遇到了使用 Rails 资产管道预编译功能的陷阱之一,您的图像和其他媒体将被赋予哈希值;并且这些资产的任何引用都必须是动态的以适应

您遇到的问题是,当您预编译资产时,.css 文件中的静态链接仅指向url(/assets/image.png). asset_path但是,您真正需要的是使用orasset_url助手动态呈现该链接

解决方案是SCSS

我们遇到了这个问题(我们使用asset syncgem),并发现解决它的最佳方法是使用 SCSS 动态呈现您的资产路径。这是我们的一些代码:

#app/assets/stylesheets/application.css.scss (yes, you should change it)
@import 'layout/fonts';

#app/assets/stylesheets/layout/fonnts.css.scss
@font-face {
    font-family: 'akagi';
    src: asset_url('fonts/akagi-th-webfont.eot');
    src: asset_url('fonts/akagi-th-webfont.eot?#iefix') format('embedded-opentype'),
         asset_url('fonts/akagi-th-webfont.woff') format('woff'),
         asset_url('fonts/akagi-th-webfont.ttf') format('truetype'),
         asset_url('fonts/akagi-th-webfont.svg#akagithin') format('svg');
    font-weight: 300;
    font-style: normal;
}

看看我们怎么用asset_url

这使 rake 能够在编译时定义资产的新路径,而不是旧路径;这意味着当您运行时,rake assets:precompile您将获得所有正确的参考。

每当我们编译我们的资产时,我都会推荐使用这个预编译过程:

rake assets:precompile RAILS_ENV=production

...当您上传到 Heroku 时:

heroku run rake assets:precompile --app [your app]
于 2013-10-21T08:24:35.550 回答
2

感谢@Rich Peck、@swap.nil 和其他人回答我的问题。在昨天搞砸了几个小时之后,我决定做我应该做的事情,阅读这个页面资产管道

...本质上,@Rich Peck 在使用动态呈现的 URL 方面提到的是关键。为此,我只需将我的 .js.coffee 文件更改为 .js.coffee.erb 文件,并使用它"<%= asset_path('my-image.png') %>"来呈现文件的适当 URL。一旦我这样做了,一切正常。我不需要对手动预编译资产做任何事情——我仍然让 heroku 自动为我做这件事。

再次感谢大家对解决这个问题的支持:)

于 2013-10-21T17:09:20.090 回答
2

如果您使用的是 Rails 4

静态资产是在没有指纹的情况下引用的。因此资产以 404 结束。从 Rails 4 开始,摘要选项默认设置为 false。 https://github.com/rails/rails/issues/11482

虽然不是首选解决方案,但您可以尝试在public文件夹中同时包含已消化和未消化的资产。

这可能会为您完成任务 - https://github.com/alexspeller/non-stupid-digest-assets

你可能也想看看这个 https://github.com/rails/sprockets-rails/issues/49

于 2013-10-21T08:31:39.683 回答