I have CarrierWave working fine through the typical ORM setup and upload via form. I would like to figure out how to use CarrierWave outside of the form submission context. For example, when a user registers I would like to grab their gravatar and store it with CarrierWave. Here's what I have, and it does not work:
gravatar_url = "http://www.gravatar.com/avatar/#{Digest::MD5.new.update(current_user.email)}?s=512&d=identicon"
uploader = ImageUploader.new
uploader.store! gravatar_url
No error either. I've been looking around the web and have not been able to find a solution.
I've had lots of trouble trying to figure out how to get store!
to work with local file paths. It turns out that store!
actually takes a file as a parameter, not a string.
For the URL, you'll need to require 'open-uri'
first, then open the file/url. Something like this should work:
require 'open-uri'
gravatar_url = "http://www.gravatar.com/avatar/#{Digest::MD5.new.update(current_user.email)}?s=512&d=identicon"
tempfile = open(gravatar_url)
uploader = ImageUploader.new
uploader.store! tempfile
The same will work with a file path, but you don't have to require open-uri
in that case.
in the controller after user sign up (assuming your user image field is called simply 'image')
gravatar_url = "http://www.gravatar.com/avatar/#{Digest::MD5.new.update(current_user.email)}?s=512&d=identicon"
@user.remote_image_url = gravatar_url
@user.save
i think this is the best way according to carrierwave docs and some searching around.
enjoy!
Actually you can do this using the built in remote_{attribute}_url
property if you are using the active record/model helpers (see the CarrierWave railscast for the details). However, I dug around in the source code a bit to see how this actually works and it appears that even if you are not you should be able to use the following:
uploader = ImageUploader.new
uploader.download! some_remote_url
uploader.store!
Give it a try.