DYZ.Life

如何让Carrierwave上传图片后读取绝对路径(WickedPDF需要)

最近在做一个简历编辑器,需要将HTML转成PDF,用了个叫做wicked_pdf的gem。但发现图片一直显示不出来(用的Carrierwave上传至本地,因为前期用户也不多就没上AWS,因为用AWS生成PDF会变很慢)。

原来是因为图片上传后路径显示的是相对路径,比如/uploads/images/XXX.jpg,但因为PDF完全在环境外发生所以读不到这个路径的图片。

解决方法就是在Carrierwave的config中设置图片的”asset_host”,这样所有路径就会将asset_host的名字变为前缀。

先改Carrierwave config:

config/initializers/carrierwave.rb

1
2
3
4
CarrierWave.configure do |config|
...
config.asset_host = ActionController::Base.asset_host
end

config/environment/development.rb

1
2
3
4
Rails.application.configure do
...
config.asset_host = 'http://localhost:3000'
end

这样再上传图片的时候,URL就会变成http://localhost:300/uploads/images/XXX.jpg

上线版本也需要写:
config/environment/production.rb

1
2
3
4
Rails.application.configure do
...
config.asset_host = 'http://example.com' #你的网站URL
end

这样再上传图片的时候,URL就会变成http://example.com/uploads/images/XXX.jpg

但是!!

这么做之后,每一次部署的时候一定要确定asset_host的路径是正确的,比如新注册了一个domain或者新设立了一个服务器先用IP测试部署,忘记更改asset_host会导致整个网站的CSS全部无法读取(屡试不爽之后怒更…)。

资料参考:Stackoverflow

热评文章