Question

I have (what I thought was) a perfectly working Heroku-Carrierwave-AWS.

I can upload images like a charm.

I now need to send the respective images, via a JSON request, to an app. This has been working on my test server, but for some reason I'm getting the following from my Heroku Logs from my rails call:

Started POST "/downloadUserPhotos" for ?? at 2014-05-03 03:27:38 +0000
Errno::ENOENT (No such file or directory @ rb_sysopen - uploads/photo/mainphoto/1/largeimage.jpg):
app/controllers/stats_controller.rb:22:in `read'
app/controllers/stats_controller.rb:22:in `downloadPhotos'

I'm pretty sure this has something to do with the following Ruby/Rails code:

def downloadPhotos
  @photos = Photo.find_by_user_id(current_user.id)
  @mainphoto = Base64.strict_encode64(File.read(@photos.mainphoto.current_path))
end

When I use my console on Heroku and type the following:

@photos = Photo.find(1)

It works and I get the correct record shown. When I ask for current_path for mainphoto, I get:

irb(main):002:0> @photos.mainphoto.current_path
=> "uploads/photo/mainphoto/1/largeimage.jpg"

So, it knows it exists. And it's in the right place.

Can anyone enlighten me (or point me in the right direction) as to why I can't use File.read. And, more importantly, how I get it to now read the image file and encode it??

This has perplexed me somewhat.

I've tried to use @photos.mainphoto.url, but other than giving me the whole URL, it still doesn't find the file using File.read.

My carrier wave config is:

CarrierWave.configure do |config|
  config.fog_credentials = {

    # Configuration for Amazon S3
    :provider              => 'AWS',
    :aws_access_key_id     => ENV['AWS_ACCESS_KEY_ID'],
    :aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
    :region                => ENV['S3_REGION']
  }

  config.cache_dir = "#{Rails.root}/tmp/uploads"

  config.fog_directory    = ENV['S3_BUCKET_NAME']

end

And I have the following in my Uploader:

def store_dir
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.user.id}"
end

Thanks in advance.

Was it helpful?

Solution

In the line:

@mainphoto = Base64.strict_encode64(File.read(@photos.mainphoto.current_path))

Change current_path for url

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top