Carrierwave, my favorite file upload framework of choice in Rails requires something along the lines of 5 lines of code to set up a file upload. The uploader can then be mounted on a model and receive
file_field uploads from forms.
Especially with the numerous storage backends and the not so common support for ORM frameworks besides ActiveRecord Carrierwave is right on par with other important Gems like Devise.
But then, after having used it upwards of 20 times, just when you think you remember the syntax without having to check the site something unexpected puzzles you:
In my case that was a file upload that was technically working, but seemed to completely ignore the options specified in the uploader.
store_dir was ignored, the different versions were simply never called - but the file upload worked like a charm.
I thought I did everything right (the uploader code looked just fine) and apparently I was uploading files just fine - but it didn't work.
After some investigation and re-doing everything following the getting-started instructions the following code in my model caught my eye:
Since my uploader was called
MenuImageUploader I thought: well that looks reasonable.
Turns out I was wrong (shocking I know) .. Carrierwave requires you to explicitly specify the desired uploader class instead of deducing it from the name.
mount_uploader :menu_image, MenuImageUploader
Suddently everything started working again, yay. So: If you ever need to just simply upload a file that has no special storage directory or other processing going on - just mount a uploader without a uploader class. Carrierwave will default to
Carrierwave::Uploader::Base for you.
And if that wasn't you intention - it will still screw you over :).
Maybe I should raise this as an issue with the developers. At least a simple
logger.warn would be in order in cases like these.