Last active
August 29, 2015 14:23
-
-
Save edorgeville/5f632f75720049b18dfc to your computer and use it in GitHub Desktop.
Rails : Carrierwave + S3 + Heroku with ENV variables
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Use as follows : | |
# ./setup_carrierwave.sh local | |
# ./setup_carrierwave.sh remote project_name [production/staging] | |
set -e | |
# Parameters | |
MODE=$1 | |
PROJECT_NAME=$2 | |
REMOTE=$3 | |
if [ "$MODE" = "local" ] ;then | |
# Add Carrierwave to Gemfile | |
echo "# Carrierwave for file uploads | |
gem 'fog' | |
gem 'fog-aws' | |
gem 'carrierwave' | |
gem 'mini_magick'" >> Gemfile | |
# Install Carrierwave | |
bundle install | |
echo "CarrierWave.configure do |config| | |
config.fog_credentials = { | |
:provider => 'AWS', | |
:aws_access_key_id => ENV['AWS_ACCESS_KEY'] || '', | |
:aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] || '', | |
:region => ENV['AWS_REGION'] || '', | |
:path_style => true | |
} | |
config.fog_directory = ENV['AWS_S3_BUCKET'] || '' | |
config.fog_public = true | |
config.fog_attributes = {'Cache-Control'=>'max-age=86400'} | |
if Rails.env.production? | |
config.asset_host = 'http://#{config.fog_directory}.s3.amazonaws.com' | |
end | |
end" > config/initializers/carrierwave.rb | |
echo "Done ! Carrierwave is now installed locally." | |
elif [ "$MODE" = "remote" ] ;then | |
if [ -z "$PROJECT_NAME" ] ;then | |
echo "Missing parameter : project-name" | |
exit 1 | |
fi | |
if [ -z "$REMOTE" ] ;then | |
echo "Missing parameter : remote" | |
exit 1 | |
fi | |
echo "Creating AWS user" | |
aws iam create-user --user-name $PROJECT_NAME | |
echo "Creating AWS bucket" | |
aws s3 mb s3://$PROJECT_NAME | |
echo "{ | |
\"Version\": \"2012-10-17\", | |
\"Statement\": [ | |
{ | |
\"Action\": \"s3:*\", | |
\"Effect\": \"Allow\", | |
\"Resource\": [ | |
\"arn:aws:s3:::$PROJECT_NAME/*\" | |
] | |
} | |
] | |
}" > $PROJECT_NAME.json | |
echo "Attaching user policy" | |
aws iam put-user-policy --user-name $PROJECT_NAME --policy-name $PROJECT_NAME --policy-document file://$PROJECT_NAME.json | |
rm $PROJECT_NAME.json | |
echo "Creating access key" | |
access="$(aws iam create-access-key --user-name $PROJECT_NAME --output text)" | |
arr=($line) | |
AWS_ACCESS_KEY=${arr[1]} | |
AWS_SECRET_ACCESS_KEY=${arr[3]} | |
heroku config:set AWS_ACCESS_KEY=$AWS_ACCESS_KEY -r $REMOTE | |
heroku config:set AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY -r $REMOTE | |
heroku config:set AWS_REGION=us-east-1 -r $REMOTE | |
heroku config:set AWS_S3_BUCKET=$PROJECT_NAME -r $REMOTE | |
else | |
echo "Missing parameter : mode" | |
exit 1 | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment