Skip to content

Instantly share code, notes, and snippets.

@edorgeville
Last active August 29, 2015 14:23
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save edorgeville/5f632f75720049b18dfc to your computer and use it in GitHub Desktop.
Save edorgeville/5f632f75720049b18dfc to your computer and use it in GitHub Desktop.
Rails : Carrierwave + S3 + Heroku with ENV variables
#!/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