Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- # Author: Andrew Lee <andrew@reticent.io>
- #
- # A shell script for deploying Meteor applications.
- # Updates fibers@1.0.5 to fibers@1.0.13 to maintain compatibility
- # with Node.js 4.4.7 (currently supported LTS). fibers@1.0.5 is no
- # longer supported as of September 2016 however Meteor continues to
- # use it when building bundles.
- #
- # This script will also upgrade Meteor's bundled BCrypt package to
- # the latest available version.
- #
- # In order to use this script, you must set your APPLICATION_PATH.
- # You can do so by using `export APPLICATION_PATH=xxx`
- #
- # You can choose to specify a working directory when executing this script.
- # Your chosen directory path should be in the form of an absolute path.
- # If you do not specify a path this script will use the current directory
- # as the working directory.
- #
- # WARNING:
- # This script assumes your deployment platform is the same as your build platform.
- # If you execute this script on a Linux 64-bit machine then this script
- # will build your Meteor application for Linux 64-bit. You can specify your
- # deployment platform by editing the `build_meteor` function within
- # this file.
- #
- # Dependencies:
- # - Node.js 4.4.7
- # - NPM
- # - Meteor
- if [ $(whoami) != 'root' ]
- then
- echo 'You must run this script as root.'
- exit
- fi
- # Check Node version.
- if [ command -v node >/dev/null 2>&1 ] || [ $(node -v) != "v4.4.7" ]
- then
- echo 'Missing dependency: Node.js 4.4.7'
- exit
- else
- echo 'Found Node.js 4.4.7'
- fi
- if [ command -v npm >/dev/null 2>&1 ]
- then
- echo 'Missing dependency: NPM'
- exit
- else
- echo 'Found NPM'
- echo 'Updating NPM'
- fi
- # Check for Meteor.
- if [ command -v meteor >/dev/null 2>&1 ]
- then
- echo 'Missing dependency: Meteor'
- else
- echo 'Found Meteor'
- fi
- # Check for application root.
- APPLICATION_PATH="${APPLICATION_PATH:?Meteor application path not set or empty Try exporting APPLICATION_PATH and executing with \"sudo -E\".}"
- # Set current working directory.
- if [ -n "$1" ]
- then
- WORKING_DIR="$1"
- echo 'Working directory specified'
- else
- WORKING_DIR=$(pwd)
- echo 'Using current directory as working directory'
- fi
- echo "WORKING_DIR=$WORKING_DIR"
- build_meteor()
- {
- cd $APPLICATION_PATH
- echo 'Building Meteor application'
- meteor build $WORKING_DIR/build --directory
- }
- fix_meteor()
- {
- if [ ! -d $WORKING_DIR/build/bundle ]
- then
- echo 'No bundle found in build directory'
- exit
- fi
- cd $WORKING_DIR/build/bundle/programs/server
- echo 'Correcting generated Node.js dependencies'
- rm -f npm-shrinkwrap.json
- sed -i -- 's/"fibers": "1.0.5"/"fibers": "1.0.13"/' package.json
- echo 'Installing Node.js dependencies'
- npm install
- echo 'Updating bundled BCrypt package'
- cd npm/npm-bcrypt
- npm update
- }
- end_script()
- {
- tar -czvf $WORKING_DIR/build/application.tar.gz $WORKING_DIR/build/bundle
- echo "Application built, updated, and repackaged at $WORKING_DIR/build/application.tar.gz"
- echo "Application may be deployed by executing \"tar -xvcf application.tar.gz; cd bundle; node index.js"
- exit
- }
- if [ -d $WORKING_DIR/build ]
- then
- read -p 'Found existing build directory. Would you like to continue using the existing build directory? (y/n) ' use_existing_build
- if [ $use_existing_build = 'y' ]
- then
- fix_meteor
- end_script
- elif [ $use_existing_build != 'n' ]
- then
- echo 'Invalid option specified'
- exit
- fi
- rm -rf $WORKING_DIR/build
- fi
- build_meteor
- fix_meteor
- end_script
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement