gracegimon
gracegimon

Reputation: 35

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!

Upvotes: 0

Views: 395

Answers (3)

gregb
gregb

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

gregb
gregb

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

gregb
gregb

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

Related Questions