Browse Source

Honor DATABASE_URL in Docker container like Rails does

This comes in handy on platforms like Heroku and Dokku.
Akinori MUSHA 3 years ago
parent
commit
5d65283580
1 changed files with 19 additions and 1 deletions
  1. 19 1
      docker/scripts/setup_env

+ 19 - 1
docker/scripts/setup_env

@@ -16,10 +16,27 @@ if ! whoami &> /dev/null; then
     fi
 fi
 
+# DATABASE_URL takes the highest precedence.
+if [[ -n "$DATABASE_URL" ]]; then
+    case "${DATABASE_URL%%://*}" in
+        mysql)
+            DATABASE_ADAPTER=mysql2 ;;
+        postgres)
+            DATABASE_ADAPTER=postgresql ;;
+        *)
+            DATABASE_ADAPTER="${DATABASE_URL%%://*}" ;;
+    esac
+    eval "$(ruby -ruri -rshellwords -e 'u = URI(ARGV[0]); {
+      HOST: u.hostname,
+      PORT: u.port,
+      USERNAME: u.user,
+      PASSWORD: u.password,
+      NAME: u.path[%r{[^/]+}]
+    }.each {|k,v| puts "HUGINN_DATABASE_#{k}=#{v.to_s.shellescape}" }' "$DATABASE_URL")"
 # is a mysql or postgresql database linked?
 # requires that the mysql or postgresql containers have exposed
 # port 3306 and 5432 respectively.
-if [[ -n "${MYSQL_PORT_3306_TCP_ADDR}" || ("${DATABASE_ADAPTER}" == "mysql2" && -n "${DATABASE_HOST}") ]]; then
+elif [[ -n "${MYSQL_PORT_3306_TCP_ADDR}" || ("${DATABASE_ADAPTER}" == "mysql2" && -n "${DATABASE_HOST}") ]]; then
     DATABASE_ADAPTER=${DATABASE_ADAPTER:-mysql2}
     DATABASE_HOST=${DATABASE_HOST:-${MYSQL_PORT_3306_TCP_ADDR}}
     DATABASE_PORT=${DATABASE_PORT:-${MYSQL_PORT_3306_TCP_PORT:-3306}}
@@ -37,6 +54,7 @@ USE_GRAPHVIZ_DOT=${HUGINN_USE_GRAPHVIZ_DOT:-${USE_GRAPHVIZ_DOT:-dot}}
 DATABASE_HOST=${HUGINN_DATABASE_HOST:-${DATABASE_HOST:-localhost}}
 DATABASE_PORT=${HUGINN_DATABASE_PORT:-${DATABASE_PORT}}
 DATABASE_ENCODING=${HUGINN_DATABASE_ENCODING:-${DATABASE_ENCODING}}
+DATABASE_USERNAME=${HUGINN_DATABASE_USERNAME:-${DATABASE_USERNAME}}
 DATABASE_PASSWORD=${HUGINN_DATABASE_PASSWORD:-${DATABASE_PASSWORD:-password}}
 DATABASE_NAME=${HUGINN_DATABASE_NAME:-${DATABASE_NAME:-huginn_production}}
 RAILS_ENV=${HUGINN_RAILS_ENV:-${RAILS_ENV:-production}}