我有两个问题,但我猜它们都会导致相同的答案。
它们都与静态图像有关,显示在开发模式而不是生产模式 (heroku) 中。
案例一:
在我的 model.rb 中
has_attached_file :avatar, styles: {
thumb: '32x32#',
medium: '512x512#'
},
:default_url => ActionController::Base.helpers.asset_path('/assets/avatar_:style.png') ## <- This line (#1)
案例二:
在我的 view.html.haml 中,我有内联 javascript
:javascript
$('.star').raty({
path: '/assets', ### <- This line (#2)
readOnly: true,
noRatedMsg : "I haven't been rated yet!",
score: function() {
return $(this).attr('data-score');
}
});
在案例 1 中,如果用户没有上传个人资料图片(使用回形针),我将尝试实现一个默认图片,其中包含两个图片 avatar_thumb.png
和avatar_medium.png
位于 /app/assets/images
在案例 2 中,我尝试使用第三方库实现 5 星评级功能 raty ,这需要“star”图像。我也在 /app/assets/images
中放置了这个库附带的三个图像。
问题:在这两种情况下,图像都是在开发模式下看到的,但当我部署到 Heroku 时却看不到。我该如何解决这个问题。
P.S.:我对 Rails 完全陌生,如有任何帮助,我们将不胜感激。
最佳答案
Assets 管道在这里并没有让你的生活变得轻松 - Paperclip 假设 default_url
是可以用所需值替换 :style
部分的东西,但这可以' 起作用,因为这显然也会改变文件名的指纹部分。
这里最简单的做法是不对这些图像使用 Assets 管道。您实际上不必为任何事情使用 Assets 管道,与 javascript 或 css 文件相比,图像的好处非常小。
为此,将图像移动到 public/images
中。然后,对于第一种情况,将默认 url 更改为
/images/avatar_:style.png
对于第二种情况,将路径设置为 /images
如果你愿意,你可以让第二种情况与 Assets 管道一起工作——比如
:javascript
$('.star').raty({
readOnly: true,
starHalf: '#{asset_path('star-half.png')}',
starOff: '#{asset_path('star-off.png')}',
starOn: '#{asset_path('star-on.png')}',
cancelOn: '#{asset_path('cancel-on.png')}',
cancelOff: '#{asset_path('cancel-off.png')}',
noRatedMsg : "I haven't been rated yet!",
score: function() {
return $(this).attr('data-score');
}
});
关于ruby-on-rails - 对第三方 js 库的 rails 4 asset pipeline 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24375009/