Merge pull request #41 from petewest/database_adapter

Read MYSQL_DATABASE_SCHEME variable from app when setting DATABASE_URL
This commit is contained in:
Jose Diaz-Gonzalez
2016-03-19 15:57:52 -04:00
4 changed files with 54 additions and 0 deletions

View File

@@ -129,3 +129,30 @@ dokku mysql:clone lolipop new_database
# finally, you can destroy the container
dokku mysql:destroy lolipop
```
## Changing database adapter
It's possible to change the protocol for DATABASE_URL by setting
the environment variable MYSQL_DATABASE_SCHEME on the app:
```
dokku config:set playground MYSQL_DATABASE_SCHEME=mysql2
dokku mysql:link lolipop playground
```
Will cause DATABASE_URL to be set as
mysql2://mysql:SOME_PASSWORD@dokku-mysql-lolipop:3306/lolipop
CAUTION: Changing MYSQL_DATABASE_SCHEME after linking will cause dokku to
believe the service is not linked when attempting to use `dokku mysql:unlink`
or `dokku mysql:promote`.
You should be able to fix this by
- Changing DATABASE_URL manually to the new value.
OR
- Set MYSQL_DATABASE_SCHEME back to its original setting
- Unlink the service
- Change MYSQL_DATABASE_SCHEME to the desired setting
- Relink the service

View File

@@ -1,6 +1,7 @@
#!/usr/bin/env bash
set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x
source "$(dirname "$0")/config"
source "$PLUGIN_AVAILABLE_PATH/config/functions"
get_random_ports() {
local iterations="${1:-1}"
@@ -70,6 +71,7 @@ service_exposed_ports() {
service_link() {
local APP="$2"
local SERVICE="$1"
update_plugin_scheme_for_app "$APP"
local SERVICE_URL=$(service_url "$SERVICE")
local SERVICE_NAME=$(get_service_name "$SERVICE")
local SERVICE_ROOT="$PLUGIN_DATA_ROOT/$SERVICE"
@@ -253,6 +255,7 @@ service_stop() {
service_unlink() {
local APP="$2"
local SERVICE="$1"
update_plugin_scheme_for_app "$APP"
local SERVICE_URL=$(service_url "$SERVICE")
local SERVICE_NAME=$(get_service_name "$SERVICE")
local EXISTING_CONFIG=$(dokku config "$APP")
@@ -309,6 +312,7 @@ promote() {
local APP="$2"
local PLUGIN_DEFAULT_CONFIG_VAR="${PLUGIN_DEFAULT_ALIAS}_URL"
local EXISTING_CONFIG=$(dokku config "$APP")
update_plugin_scheme_for_app "$APP"
local SERVICE_URL=$(service_url "$SERVICE")
local CONFIG_VARS=($(echo "$EXISTING_CONFIG" | grep "$SERVICE_URL" | cut -d: -f1)) || true
local PREVIOUS_DEFAULT_URL=$(get_url_from_config "$EXISTING_CONFIG" "$PLUGIN_DEFAULT_CONFIG_VAR")
@@ -350,3 +354,9 @@ service_linked_apps() {
tr '\n' ' ' < "$LINKS_FILE"
}
update_plugin_scheme_for_app() {
local APP=$1
local MYSQL_DATABASE_SCHEME=$(config_get $APP MYSQL_DATABASE_SCHEME)
PLUGIN_SCHEME=${MYSQL_DATABASE_SCHEME:-$PLUGIN_SCHEME}
}

View File

@@ -59,3 +59,12 @@ teardown() {
assert_contains "${lines[*]}" "--link dokku.mysql.l:dokku-mysql-l"
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
}
@test "($PLUGIN_COMMAND_PREFIX:link) uses apps MYSQL_DATABASE_SCHEME variable" {
dokku config:set my_app MYSQL_DATABASE_SCHEME=mysql2
dokku "$PLUGIN_COMMAND_PREFIX:link" l my_app
url=$(dokku config:get my_app DATABASE_URL)
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
assert_contains "$url" "mysql2://mysql:$password@dokku-mysql-l:3306/l"
dokku "$PLUGIN_COMMAND_PREFIX:unlink" l my_app
}

View File

@@ -53,3 +53,11 @@ teardown() {
run dokku config my_app
assert_contains "${lines[*]}" "DOKKU_MYSQL_"
}
@test "($PLUGIN_COMMAND_PREFIX:promote) uses MYSQL_DATABASE_SCHEME variable" {
password="$(cat "$PLUGIN_DATA_ROOT/l/PASSWORD")"
dokku config:set my_app "MYSQL_DATABASE_SCHEME=mysql2" "DATABASE_URL=mysql://u:p@host:3306/db" "DOKKU_MYSQL_BLUE_URL=mysql2://mysql:$password@dokku-mysql-l:3306/l"
dokku "$PLUGIN_COMMAND_PREFIX:promote" l my_app
url=$(dokku config:get my_app DATABASE_URL)
assert_contains "$url" "mysql2://mysql:$password@dokku-mysql-l:3306/l"
}