Wes Doyle
Wes Doyle

Reputation: 2287

Carrierwave no such file or directory

I am trying to write a method that uses the EXIFR gem to retrieve data (in this case camera model) about photos as they are uploaded using Carrierwave. The current method I am using looks like this in my model:

before_save  :get_exif_data 

        def get_exif_data
          imgfile = EXIFR::JPEG.new(photo.filename)

          return

          self.model = imgfile.model  

        end

However, I get an error "No such file or directory - IMG_0953.JPG" (or another filename).

My goal is to extract the "type of camera" data using the EXIFR gem's .model method before saving. From the EXIFR gem documentation:

EXIFR::JPEG.new('IMG_6841.JPG').model               # => "Canon PowerShot G3"

The error suggests to me that my photo.filename has not yet been created. How might I process the image before it is saved?

Upvotes: 0

Views: 784

Answers (2)

Wes Doyle
Wes Doyle

Reputation: 2287

Actually, something like the following ended up working for me:

before_save :get_camera

private
    def get_camera
        self.model = EXIFR::JPEG.new(photo.file.path).model
    end
end

Upvotes: 1

Johnny Dương
Johnny Dương

Reputation: 772

Try

EXIFR::JPEG.new(Rails.root.to_s + photo.filename_url)

carrierwave return an url look like /uploads/... its a relative path to webapp, but EXIFR::JPEG will think it a path of system file

Upvotes: 0

Related Questions