I have an image named test.jpg in my assets/images folder.
I'm trying to read the image in my controller:
image_path = ActionController::Base.helpers.asset_path("test.jpg")
image_data = File.read(image_path)
I get the following error:
No such file or directory @ rb_sysopen - /assets/test-80cc818a7ee3f5d3cab23996fb09f4685b38b78258084a1ff23eca1c626646f6.jpg
Any ideas? Why is it appending that code to my image url? Can I get rid of it so it can read the original image url?
Thanks!
CodePudding user response:
So, basically asset_path returns a URL-path, relative to the root domain - ie. "/assets/test-{SHADigest}.jpg".
That path is not a path for the file system, that File.read will accept, therefore, on unix systems you're trying to access the file system at /assets/xyz, like had it been /home/xyz-path.
What you can do, is either read from file system, raw file (Ignoring any thing the asset pipeline may or may not be set up to do)
image_path = Rails.root.join("assets", "images", "test.jpg")
image_data = File.read(image_path) # Maybe check with File.exist?(image_path) as well.
Or you can read from its own webserver, with any HTTP Client tool (RestClient, Net::HTTP or alike), and use asset_url instead of asset_path.
This won't work in rails console unless the server is "accidentally" running, and reachable on config.asset_host from where ever the rails console is running.
