display a PDF from cloudinary - ruby-on-rails

I can load a pdf in cloudinary but i can't display it. I tried with :
<%= cl_image_tag worker.cv.path, width: 1000, height: 1000,crop: :fill, format: :jpg %>
Renders in
<img width="1000" height="1000" src="http://res.cloudinary.com/dgl9juzps/image/upload/c_fill,h_1000,w_1000/v1498033370/owpbctm8yi8pbwsxt3wz.pdf.jpg%22" alt="Owpbctm8yi8pbwsxt3wz.pdf">
but it doesn't work.
Thanks for help

The rendered link has two problems:
<img width="1000" height="1000" src="http://res.cloudinary.com/dgl9juzps/image/upload/c_fill,h_1000,w_1000/v1498033370/owpbctm8yi8pbwsxt3wz.pdf.jpg%22" alt="Owpbctm8yi8pbwsxt3wz.pdf">
// src = "http://res.cloudinary.com/.../owpbctm8yi8pbwsxt3wz.pdf.jpg%22"
The trailing " from the %22
and the file extension is .pdf.jpg instead of just .jpg
The link works if you just call:
http://res.cloudinary.com/dgl9juzps/image/upload/c_fill,h_1000,w_1000/v1498033370/owpbctm8yi8pbwsxt3wz.jpg
So maybe you should only pass the filename without extension to the helper.

Related

Rails: get image source after asset precompile

Currently I do this for my website
image_tag("logo.png")
This results
<img src="/assets/logo-c9dc9867ad75fdidmjdoehdo53di.png" alt="Logo" />
This works just fine for me. But sometimes I just need the source part of the image i.e I just need this part /assets/logo-c9dc9867ad75fdidmjdoehdo53di.png. How can I get it?
If your images are in app/assets/images, then use asset_path
<%= asset_path("logo.png") %>
# => "/assets/logo-c9dc9867ad75fdidmjdoehdo53di.png"
If your images are in public/assets, then use image_path
<%= image_path("logo.png") %>
# => "/assets/logo-c9dc9867ad75fdidmjdoehdo53di.png"

Rails 4.2 upgrade: Asset names passed to helpers should not include the "/assets/" prefix

I upgraded from Rails 4.1 to 4.2. I get the following error now:
Sprockets::Rails::Helper::AbsoluteAssetPathError at /
Asset names passed to helpers should not include the "/assets/" prefix. Instead of "/assets/spinner.gif", use "spinner.gif"
The error message is clear. However, I don't know what it's talking about. It highlights this line of code:
<div class="loading">
<%= image_tag asset_path('spinner.gif') %>
</div>
I do not use the literal string '/assets/' in that line of code. So what is this error referring to?
I was able to resolve that specific error by removing the call to asset_path and just using image_tag 'spinner.gif'; however, I still get the error right here (I am using Paperclip gem):
<%= image_tag current_user.avatar.url(:thumb) %>
caused by this:
ActionController::Base.helpers.asset_path('missing-user.png')
Again, it is complaining about asset_path.
UPDATE:
Error only occurs when I pass asset_path to image_tag method:
ActionController::Base.helpers.asset_path('missing-user.png')
=> "/assets/missing-user.png"
helper.image_tag(ActionController::Base.helpers.asset_path('missing-user.png'))
Sprockets::Rails::Helper::AbsoluteAssetPathError: Asset names passed to helpers should not include the "/assets/" prefix. Instead of "/assets/missing-user.png", use "missing-user.png"
image_tag will pass the source option to asset_path on its own:
image_tag("icon")
# => <img alt="Icon" src="/assets/icon" />
image_tag("icon.png")
# => <img alt="Icon" src="/assets/icon.png" />
image_tag("/icons/icon.gif", height: '32', width: '32')
# => <img alt="Icon" height="32" src="/icons/icon.gif" width="32" />
So when you call image_tag asset_path('spinner.gif') you're actually doing image_tag( '/assets/spinner.gif' ) which is why you get the sprockets warning.
I resolved the issue but I still don't understand the WHY factor. This only happens when I upgraded from Rails 4.1 to 4.2. Check this out:
ActionController::Base.helpers.asset_path('missing-user.png')
=> "/assets/missing-user.png"
helper.image_tag "/assets/missing-user.png"
Sprockets::Rails::Helper::AbsoluteAssetPathError: Asset names passed to helpers should not include the "/assets/" prefix. Instead of "/assets/missing-user.png", use "missing-user.png"
helper.image_tag "missing-user.png"
=> "<img src=\"/assets/missing-user.png\" alt=\"Missing user\" />"
Based on the above, image_tag does not want you to pass it the literal path string 'assets'. Consequently, in my Paperclip gem helper, I had to od this:
has_attached_file :avatar,
styles: { normal: "128x128>", thumb: "40x40>" },
default_style: :thumb,
default_url: ->(attachment) { 'missing-user.png' }
In other words, I had to remove this:
ActionController::Base.helpers.image_url('missing-user.png')
since image_url returns the string '/assets/missing-user.png'.

Ruby on rails 4 assets images cannot be loaded

Currently, I am using ruby on rails 4.
In the html part, I am trying to load an image:
<img width="121" height="31" src="/assets/images/flatty/logo_lg.svg" />
The image file: logo_lg.svg is in the location: app/assets/images/flatty/
I tried:
<%= image_tag "/assets/images/flatty/logo_lg.png" %>
And in production.rb file: config.serve_static_assets = true.
Moreover, tried: rails assets:precompile
But the system still cannot find the image file.
You have a .svg but you are trying to load a .png . Change your code to this:
<%= image_tag "flatty/logo_lg.svg" %>
Don't use your full directory when you load images. The asset pipeline does that for you. Just put them in the right place i.e the images directory and write down:
<%= image_tag "someimg.png" %>
Additionally, if you want to style your image, you can give it a class or an id ( id would fit more for a logo):
<%= image_tag "flatty/logo_lg.svg" , :id => 'someId' , :class => 'someClass' %>
And then just put the CSS in your application css file or the one generated by the controller of you page:
.someClass {
width: 50px;
height: 50px;
}
#someId {
width: 50px;
height: 50px;
}
If you want to put an SVG though, they react differently. You have to remove the attributes given in the SVG's code (you can open up an .svg file with most of the text editors). It's XML markup.
Read this answer for more info.

Rails Engines: Accessing an images under an engine

We have a view under an engine that is supposed to show an image. this image (Button-Blank-Red-icon.png) is saved under the engine's path of "app/assets/images/engine_name/Button-Blank-Red-icon.png
I am getting the below error when trying to display this view.
ActionController::RoutingError (No route matches [GET] "/images/<>engine_name>/Button-Blank-Red-icon.png"):
What's the right way to display an image stored under engine's app/assets/images/engine_name/?
Here is the view code:
<img src="<%= RED_GREEN_YELLOW_CLS[r.step_qties.last.ontime_indicator] %>" height="15" width="15" />
r.step_qties.last.ontime_indicator returns one of 'green', 'red' and 'yellow'
The definition of constant RED_GREEN_YELLOW_CLS is in my_constant.rb under engine's config/initializers/:
RED_GREEN_YELLOW_CLS = {
'green' => '/Button-Blank-Green-icon.png',
'red' => '/Button-Blank-Red-icon.png',
'yellow' => '/Button-Blank-Yellow-icon.png'
}
One working solution with image tag (refers to episode#277 in railscasts.com):
<%=image_tag(RED_GREEN_YELLOW_CLS[r.step_qties.last.ontime_indicator], size: '23x23') %>
There is no need of block .
The my_constant.rb is:
RED_GREEN_YELLOW_CLS = {
'green' => 'engine_name/Button-Blank-Green-icon.png',
'red' => 'engine_name/Button-Blank-Red-icon.png',
'yellow' => 'engine_name/Button-Blank-Yellow-icon.png'
}
It looks like you're displaying your image via an AssetUrlHelpers. Your view code needs to be changed to the following:
<img src="<%= image_path(RED_GREEN_YELLOW_CLS[r.step_qties.last.ontime_indicator]) %>"
height="15" width="15" />
image_path is going to properly add the assets portion of the path, along with the hash generated by the asset pipeline, so that you get a correct url.
The correct url should be "/assets/<>engine_name>/Button-Blank-Red-icon.png" because when rails compiles the assets it will just mix all the content of /images /stylesheets and /javascript for all the gems and your app/assets dir inside public/assets. It will just copy "<>engine_name>" folder and it's content there.
It's not clear where this: "/images/<>engine_name>/Button-Blank-Red-icon.png" comes from, I'm not sure how to get that from the code you show.
Try to change what you use to "/assets/<>engine_name>/..." and it should work.
You can try to compile your assets manually and look where the files go, just do "bundle exec rake assets:compile RAILS_ENV=production", you can safely delete /public/assets after that test to keep it clean.
Have you tried asset_path helper?
<%= image_tag(asset_path("engine_name/#{RED_GREEN_YELLOW_CLS[r.step_qties.last.ontime_indicator]}"), size: '23x23') %>
replace engine_name with the actual name of the engine app.
Images from engine are accessible via:
http://localhost:3000/assets/engine_name/image.png
So as you said
<img src="<%= asset_path(RED_GREEN_YELLOW_CLS[r.step_qties.last.ontime_indicator]) %>" height="15" width="15" />
RED_GREEN_YELLOW_CLS = {
'green' => 'engine_name/Button-Blank-Green-icon.png',
'red' => 'engine_name/Button-Blank-Red-icon.png',
'yellow' => 'engine_name/Button-Blank-Yellow-icon.png'
}
Will work.
p.s. I find r.step_qties.last.ontime_indicator personally insulting train wreck. :)

Wickedpdf Heroku some images are not showing

Everthing works perfect on my local, but on production(Heroku) some images in the generated pdf are not showing:
<img alt="Bg_pdf" id="background" src="file:////app/app/assets/images/bg_pdf.jpg">
<img alt="Bg_pdf2" id="background2" src="file:////app/app/assets/images/bg_pdf2.jpg">
<img alt="Bg_pdf2" id="background3" src="file:////app/app/assets/images/bg_pdf2.jpg">
<img alt="Bg_pdf2" id="background4" src="file:////app/app/assets/images/bg_pdf2.jpg">
<img alt="Step_4" id="pic3" src="file:////app/app/assets/images/steps/raka/right/step_4.jpg" style="margin-top: 20px;">
The #pic3 does not appear, but all the other images above appear.
Why does pic3 not appear in the generated pdf? Is there because there is some sort of maximum amount of images allowed?
In my gem file:
gem 'wicked_pdf', github: 'mileszs/wicked_pdf'
gem 'wkhtmltopdf-heroku'
And I am using the helper method:
<%= wicked_pdf_image_tag("steps/#{session[:product]}/#{session[:sving]}/step_4.jpg", :id => 'pic3', :style => 'margin-top: 20px;') %>
Some trouble with .jpg, jpeg images, used .PNG images instead and it works well.

Resources