Skip to content

Instantly share code, notes, and snippets.

@jgautsch
Created May 29, 2014 00:48
Show Gist options
  • Save jgautsch/b1d48d75f060c8fd5f26 to your computer and use it in GitHub Desktop.
Save jgautsch/b1d48d75f060c8fd5f26 to your computer and use it in GitHub Desktop.
AWS Elastic Beanstalk Ruby 2.0/Passenger Environment - .ebextensions tweaks and Sidekiq configuration. This is known to work fine with AWS Elastic Beanstalk 's 64bit Amazon Linux 2014.03 v1.0.2 running Ruby 2.0 (Passenger Standalone) stack. This is everything in my .ebextensions folder. Based on https://gist.github.com/gcarrion-gfrmedia/11396682
# Fixing permissions of packaged gems
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/10_fixing_permission.sh":
content: |
#!/usr/bin/env bash
# . /opt/elasticbeanstalk/containerfiles/envvars
. /opt/elasticbeanstalk/support/envvars
CACHE_GEM_DIR=$EB_CONFIG_APP_ONDECK/vendor/cache
if [ -d $CACHE_GEM_DIR ]
then
chown -R webapp:webapp $CACHE_GEM_DIR
echo "Modified the owner of $CACHE_GEM_DIR files"
else
echo "Nothing in $CACHE_GEM_DIR"
fi
true
mode: "000755"
# Modified system bundle script to run 'bundle package'
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/10_bundle_install.sh":
content: |
#!/usr/bin/env bash
. /opt/elasticbeanstalk/support/envvars
set -xe
cd $EB_CONFIG_APP_ONDECK
if [ -f Gemfile ]; then
echo "running 'bundle install' with Gemfile:"
cat Gemfile
bundle install
if [ $? != 0 ]; then
echo "ERROR: bundle install failed!"
exit 1
else
echo "bundle install succeeded"
fi
else
echo "no Gemfile found! Skipping bundle install stage!"
fi
if [ -f Gemfile.lock ]; then
echo "encountered a Gemfile.lock, setting proper permissions"
chown $EB_CONFIG_APP_USER:$EB_CONFIG_APP_USER Gemfile.lock
else
echo "no Gemfile.lock file found, so no permissions to set on it"
fi
if [ "$BUNDLE_DISABLE_SHARED_GEMS" = "1" ]; then
cd $EB_CONFIG_APP_ONDECK;
chown -R $EB_CONFIG_APP_USER:$EB_CONFIG_APP_USER ./$BUNDLE_PATH;
echo "Modified the owner of '$BUNDLE_PATH' files";
fi
true
mode: "000755"
# Sidekiq interaction and startup script
# Sidekiq interaction and startup script
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/50_restart_sidekiq":
mode: "000755"
content: |
#!/bin/bash
# . /opt/elasticbeanstalk/containerfiles/envvars
. /opt/elasticbeanstalk/support/envvars
PIDFILE=$EB_CONFIG_APP_PIDS/sidekiq.pid
cd $EB_CONFIG_APP_CURRENT
if [ -f $PIDFILE ]
then
SIDEKIQ_LIVES=$(/bin/ps -o pid= -p `cat $PIDFILE`)
if [ -z $SIDEKIQ_LIVES ]
then
rm -rf $PIDFILE
else
kill -TERM `cat $PIDFILE`
sleep 10
rm -rf $PIDFILE
fi
fi
BUNDLE=/usr/local/bin/bundle
SIDEKIQ=/usr/local/bin/sidekiq
# $BUNDLE exec $SIDEKIQ \
# -e production \
# -P /var/app/containerfiles/pids/sidekiq.pid \
# -C /var/app/current/config/sidekiq.yml \
# -L /var/app/containerfiles/logs/sidekiq.log \
# -d
RAILS_ENV=production bundle exec $SIDEKIQ \
-e production \
-P /var/app/support/pids/sidekiq.pid \
-C /var/app/current/config/sidekiq.yml \
-L log/sidekiq.log \
-d
"/opt/elasticbeanstalk/hooks/appdeploy/pre/03_mute_sidekiq":
mode: "000755"
content: |
#!/bin/bash
# . /opt/elasticbeanstalk/containerfiles/envvars
. /opt/elasticbeanstalk/support/envvars
PIDFILE=$EB_CONFIG_APP_PIDS/sidekiq.pid
if [ -f $PIDFILE ]
then
SIDEKIQ_LIVES=$(/bin/ps -o pid= -p `cat $PIDFILE`)
if [ -z $SIDEKIQ_LIVES ]
then
rm -rf $PIDFILE
else
kill -USR1 `cat $PIDFILE`
sleep 10
fi
fi
container_commands:
seeddb:
command: 'export HOME=/root; rake db:seed'
leader_only: true
commands:
test:
command: "bundle config build.nokogiri --use-system-libraries"
# .ebextensions/packages.config
packages:
yum:
postgresql-devel: []
git: []
libxml2: []
libxml2-devel: []
libxslt: []
libxslt-devel: []
@nelyj
Copy link

nelyj commented Apr 9, 2015

In 0002_bundle_pack.config appear the next message:

Activity execution failed, because: command failed with error code 1: /opt/elasticbeanstalk/hooks/appdeploy/pre/10_bundle_install.sh

/opt/elasticbeanstalk/hooks/appdeploy/pre/10_bundle_install.sh: line 6: cd: HOME not set (Executor::NonZeroExitStatus)

How can I fix this ?

@tdeschamps
Copy link

Hi Jon & Pato,
I managed to make the script work by adding "export EB_CONFIG_APP_ONDECK=$(/opt/elasticbeanstalk/bin/get-config container -k app_staging_dir)" on line 9 in "002_bundle_pack.config". I

It seems that AWS has changed its policy regarding the environment variables, you should now acces them using the scripts described there: https://forums.aws.amazon.com/thread.jspa?threadID=164756

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment