我正在使用回形针来处理图像。
要在用户未提供图像时提供图像,我使用defaul_url
提供的值,该值设置为
ActionController::Base.helpers.asset_path('logo_medium.png')
这在本地工作正常:图像的src属性设置正确。
然而,在heroku上,事情就会破裂。图像的src属性值为'/logo_medium.png',这是错误的。
的确,当我在heroku上启动rails控制台时,
ActionController::Base.helpers.asset_path('logo_medium.png')
返回
/assets/logo_medium-f0bc5e00182468b861cf32c8c35595ce.png
这是正确的。
我很困惑,应用程序似乎返回了与控制台不同的东西。
为了完整起见,我的观点使用
<%= image_tag @user.avatar.url(:medium) %>
非常感谢任何帮助。
答案 0 :(得分:2)
部署到Heroku时,需要预编译资产
这很重要,因为预编译fingerprints your assets,最后给它们一个大的散列值。原因是:
指纹识别是一种使文件名依赖的技术 关于文件的内容。当文件内容改变时, 文件名也被更改。对于静态或不经常的内容 改变了,这提供了一个简单的方法来判断是否有两个版本 文件是相同的,即使在不同的服务器或部署日期也是如此。
指纹识别不是Rails的问题;这是您尝试在生产环境中加载这些资产的方式。资产管道仅用于样式化,这意味着如果您要调用任何资产,则需要能够使用动态方法来调用它们,例如image_path
或asset_path
使用CSS执行此操作的方法是使用SCSS,使用javascript,它会将.erb
文件类型附加到JS文件名。这允许您使用动态方法调用所需的资源,从而允许您使用指纹文件
<强>回形针强>
您在问题的最后添加了Paperclip参考。 Paperclip通过ActiveRecord加载文件,并且根本不接触资产