diff --git a/plugins/ps/commands b/plugins/ps/commands index 271816ee8..d9614c623 100755 --- a/plugins/ps/commands +++ b/plugins/ps/commands @@ -90,10 +90,17 @@ case "$1" in DOKKU_SCALE_FILE="$DOKKU_ROOT/$APP/DOKKU_SCALE" shift 2 - generate_scale_file "$APP" "$IMAGE_TAG" - if [[ -z "$@" ]]; then - dokku_log_info1 "Scaling for $APP" - dokku_log_info2 "$(< $DOKKU_SCALE_FILE)" + [[ ! -e $DOKKU_SCALE_FILE ]] && generate_scale_file "$APP" "$IMAGE_TAG" + if [[ -z "$@" ]];then + dokku_log_info1_quiet "Scaling for $APP" + dokku_col_log_info1_quiet "proctype" "qty" + dokku_col_log_info1_quiet "--------" "---" + while read line || [[ -n "$line" ]]; do + [[ -z "$line" ]] && continue + PROC_NAME=${line%%=*} + PROC_COUNT=${line#*=} + dokku_col_log_info1 "$PROC_NAME" "$PROC_COUNT" + done < "$DOKKU_SCALE_FILE" else set_scale "$APP" "$@" release_and_deploy "$APP" "$IMAGE_TAG" @@ -103,7 +110,7 @@ case "$1" in help | ps:help) cat<, List processes running in app container(s) - ps:scale = [=], Set how many instances of a given process to run + ps:scale [ = [=]], Get/Set how many instances of a given process to run ps:start , Start app container(s) ps:stop , Stop app container(s) ps:rebuild , Rebuild an app diff --git a/plugins/ps/functions b/plugins/ps/functions index 47961de76..eafc19916 100755 --- a/plugins/ps/functions +++ b/plugins/ps/functions @@ -15,15 +15,29 @@ generate_scale_file() { copy_from_image "$IMAGE" "/app/DOKKU_SCALE" "$DOKKU_ROOT/$APP" 2>/dev/null || true if [[ ! -f $DOKKU_SCALE_FILE ]]; then - dokku_log_info1_quiet "DOKKU_SCALE file not found in app image. Defaulting to a single web process" - echo "web=1" >> $DOKKU_SCALE_FILE + dokku_log_info1_quiet "DOKKU_SCALE file not found in app image. Generating one based on Procfile..." + TMP_WORK_DIR=$(mktemp -d) + trap 'rm -rf "$TMP_WORK_DIR" > /dev/null' RETURN + + copy_from_image "$IMAGE" "/app/Procfile" "$TMP_WORK_DIR" 2>/dev/null || true + local PROCFILE="$TMP_WORK_DIR/Procfile" + if [[ ! -e "$PROCFILE" ]]; then + echo "web=1" >> $DOKKU_SCALE_FILE + else + while read line || [[ -n "$line" ]]; do + [[ -z "$line" ]] && continue + NAME=${line%%:*} + NUM_PROCS=0 + [[ "$NAME" == "web" ]] && NUM_PROCS=1 + echo "$NAME=$NUM_PROCS" >> $DOKKU_SCALE_FILE + done < "$PROCFILE" + fi dokku_log_info1_quiet "New DOKKU_SCALE file generated" - else dokku_log_info1_quiet "DOKKU_SCALE file found" - print_dokku_scale_file $APP fi + print_dokku_scale_file $APP } set_scale() {