Very interesting presentation, really on a high level, I enjoyed reading it.
I noticed that many problems that you mention other uploading gems have are actually solved by Shrine:
- "Transformation juggling" -- Versions are processed at instance-level, so you don't need to remember a class-level DSL.
- "File path config" -- If you change the location where your files are stored, the existing files on old locations will still work normally
- "Form validation dance" -- Very simple with Shrine, you just add an "<attachment>" hidden field.
- "Schema pollution" -- Shrine stores uploaded files exactly in the way that you described, in a single column as JSON
The idea of an image server indeed looks very interesting, but I think you're forgetting that this solves only one part of file uploads (although I agree it's a big part, and imgix looks really sexy). If you're using an image server, you still need to do:
- Caching the file (this still needs a direct upload endpoint)
- File validations (most notably preventing big files)
- Storing the file to image server (this still needs a background job)
- Model attachment logic (all of the assignment/callback logic)
One problem that I always had with on-the-fly processing is, if you have a page with a lot of photos, and you want to change the URL so that they're processed differently, how will that page look when a first person visits it? I think it will be horrible, the user will have to wait for a really long time to actually see the images, which is not nice user experience.
Also, the "image server" strategy can be used only for images, so if you want to upload documents, audio or video, you still need do regular processing on the application side. What's nice about uploading gems is that they provide a general solution.