Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Paperclip: migrating from file system storage to Amazon S3

I have a RoR website, where users can upload photos. I use paperclip gem to upload the photos and store them on the server as files. I am planning to move to Amazon S3 for storing the photos. I need to move all my existing photos from server to Amazon S3. Can someone tell me the best way for moving the photos. Thanks !

like image 596
ketan jain Avatar asked May 14 '11 16:05

ketan jain


3 Answers

You'll want to log into your AWS Console and create a bucket structure to facilitate your images. Neither S3 nor Paperclip have any tools in the way of bulk migrations from file system -> s3, you'll need to use the tool s3cmd for that. In particular, you're interested in the s3cmd sync command, something along the lines of:

s3cmd sync ./public/system/images/ s3://imagesbucket

If you have any image urls hard-coded into your database (a la markdown/template code) this might be a little tricky. One option would be to manually update your urls to point to the new bucket. Alternatively, you can rack-rewrite.

like image 82
Noz Avatar answered Nov 09 '22 10:11

Noz


You can easily do this by creating a bucket on Amazon S3 that has the same folder structure as your public directory on your Rails app.

So say for instance, you create a new bucket on Amazon S3 called MyBucket and it has a folder in it called images. You'd just move all of your images within your Rails app's images folder over to that new bucket's images folder.

Then you can set up your app to use an asset host like this answer describes: is it good to use S3 for Rails "public/images" and there an easy way to do it?

If you are using image_tag or other tag helpers (javascripts, stylesheets, etc), then it will use that asset_host for production environments and properly generate the URL to your S3 bucket.

like image 32
iwasrobbed Avatar answered Nov 09 '22 10:11

iwasrobbed


I found this script which takes care of moving the images to Amazon S3 bucket using rake task. https://gist.github.com/924617

like image 6
ketan jain Avatar answered Nov 09 '22 11:11

ketan jain