Reputation: 35
I have a method inside a Model that returns an image URL as a String such as: "assets/myImage.png", this works well in production without CDN, the image is being served.
Using the CDN (Cloudfront) serves only files with its fingerprint or that's what I've read. So when I open up my Google Console it shows "assets/myImage.png", but not the fingerprinted version, so it obviously doesn't show the image.
In short: I need to know how to use a helper method that returns the fingerprinted version of my image inside a Model.
Any help would be great!
Upvotes: 0
Views: 395
Reputation: 772
I believe you can access the Sprockets helper using:
self.class.helpers.asset_path('application.css')
or self.class.helpers.asset_digest_path('application.css')
Both of these are a backward way of getting access to the helpers that Sprockets uses for fingerprinting assets in production. Does that work?
Based on this SO answer
Upvotes: 1
Reputation: 772
I actually don't think my above answer will work. Instead, try this instide production.rb
config.action_controller.asset_host = "d24xjtg100euk4.cloudfront.net"
That should append the CDN url to all your rails helpers (like image_helper).
You could also roll your own custom helper that takes the asset location and concatenates it with the CDN url.
Based on this blog post: SETTING UP A CLOUDFRONT CDN FOR RAILS
EDIT: Posted another answer below using Sprockets helper method.
Upvotes: 0
Reputation: 772
You should be able to get the URL from the ruby aws-sdk gem.
Here are the docs for AWS::CloudFront::Client
Update: This answer is wrong. See my different answer below.
Upvotes: 0