Rails referencing assets in models Rails 4 and CDN
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!
I believe you can access the Sprockets helper using:
- self.class.helpers.asset_path('application.css') or
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
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.
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.