用于图像的heroku上的rails控制台中的asset_path

时间:2013-12-05 20:26:29

标签: ruby-on-rails heroku ruby-on-rails-4 paperclip asset-pipeline

我正在使用回形针来处理图像。

要在用户未提供图像时提供图像,我使用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) %>

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

Asset Fingerprinting

部署到Heroku时,需要预编译资产

这很重要,因为预编译fingerprints your assets,最后给它们一个大的散列值。原因是:

  

指纹识别是一种使文件名依赖的技术   关于文件的内容。当文件内容改变时,   文件名也被更改。对于静态或不经常的内容   改变了,这提供了一个简单的方法来判断是否有两个版本   文件是相同的,即使在不同的服务器或部署日期也是如此。

指纹识别不是Rails的问题;这是您尝试在生产环境中加载这些资产的方式。资产管道仅用于样式化,这意味着如果您要调用任何资产,则需要能够使用动态方法来调用它们,例如image_pathasset_path

使用CSS执行此操作的方法是使用SCSS,使用javascript,它会将.erb文件类型附加到JS文件名。这允许您使用动态方法调用所需的资源,从而允许您使用指纹文件


<强>回形针

您在问题的最后添加了Paperclip参考。 Paperclip通过ActiveRecord加载文件,并且根本不接触资产