Last active
December 10, 2015 09:49
-
-
Save bunnymatic/4416913 to your computer and use it in GitHub Desktop.
new meteor shell script which alllows execution of node processes with easy access to the MeteorJS environment if it's run as meteor-exec.
To make this work, replace /usr/local/meteor/bin/meteor with this file, and add a link from meteor-exec to this.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
BUNDLE_VERSION=0.2.8 | |
# OS Check. Put here because here is where we download the precompiled | |
# bundles that are arch specific. | |
UNAME=$(uname) | |
if [ "$UNAME" != "Linux" -a "$UNAME" != "Darwin" ] ; then | |
echo "Sorry, this OS is not supported." | |
exit 1 | |
fi | |
if [ "$UNAME" = "Darwin" ] ; then | |
if [ "i386" != $(uname -p) -o "1" != $(sysctl -n hw.cpu64bit_capable 2>/dev/null || echo 0) ] ; then | |
# Can't just test uname -m = x86_64, because Snow Leopard can | |
# return other values. | |
echo "Only 64-bit Intel processors are supported at this time." | |
exit 1 | |
fi | |
ARCH="x86_64" | |
elif [ "$UNAME" = "Linux" ] ; then | |
ARCH="$(uname -m)" | |
if [ "$ARCH" != "i686" -a "$ARCH" != "x86_64" ] ; then | |
echo "Unsupported architecture: $ARCH" | |
echo "Meteor only supports i686 and x86_64 for now." | |
exit 1 | |
fi | |
fi | |
# Find the script dir, following one level of symlink. Note that symlink | |
# can be relative or absolute. Too bad 'readlink -f' is not portable. | |
ORIG_DIR=$(pwd) | |
cd $(dirname "$0") | |
if [ -L "$(basename $0)" ] ; then | |
cd $(dirname $(readlink $(basename "$0") ) ) | |
fi | |
SCRIPT_DIR=$(pwd -P) | |
cd "$ORIG_DIR" | |
function install_dev_bundle { | |
set -e | |
trap "echo Failed to install dependency kit." EXIT | |
TARBALL="dev_bundle_${UNAME}_${ARCH}_${BUNDLE_VERSION}.tar.gz" | |
TMPDIR="$SCRIPT_DIR/dev_bundle.xxx" | |
rm -rf "$TMPDIR" | |
mkdir "$TMPDIR" | |
if [ -f "$SCRIPT_DIR/$TARBALL" ] ; then | |
echo "Skipping download and installing kit from $SCRIPT_DIR/$TARBALL" | |
tar -xzf "$SCRIPT_DIR/$TARBALL" -C "$TMPDIR" | |
else | |
curl -# https://d3sqy0vbqsdhku.cloudfront.net/$TARBALL | tar -xzf - -C "$TMPDIR" | |
test -x "${TMPDIR}/bin/node" # bomb out if it didn't work, eg no net | |
fi | |
mv "$TMPDIR" "$SCRIPT_DIR/dev_bundle" | |
echo "Installed dependency kit v${BUNDLE_VERSION} in dev_bundle." | |
echo | |
trap - EXIT | |
set +e | |
} | |
if [ -d "$SCRIPT_DIR/.git" ] || [ -f "$SCRIPT_DIR/.git" ]; then | |
# In a checkout. | |
if [ ! -d "$SCRIPT_DIR/dev_bundle" ] ; then | |
echo "It's the first time you've run Meteor from a git checkout." | |
echo "I will download a kit containing all of Meteor's dependencies." | |
install_dev_bundle | |
elif [ ! -f "$SCRIPT_DIR/dev_bundle/.bundle_version.txt" ] || | |
grep -qvx "$BUNDLE_VERSION" "$SCRIPT_DIR/dev_bundle/.bundle_version.txt" ; then | |
echo "Your dependency kit is out of date. I will download the new one." | |
rm -rf "$SCRIPT_DIR/dev_bundle" | |
install_dev_bundle | |
fi | |
DEV_BUNDLE="$SCRIPT_DIR/dev_bundle" | |
METEOR="$SCRIPT_DIR/app/meteor/meteor.js" | |
else | |
# In an install | |
DEV_BUNDLE=$(dirname "$SCRIPT_DIR") | |
METEOR="$DEV_BUNDLE/app/meteor/meteor.js" | |
fi | |
# Bump our file descriptor ulimit as high as it will go. This is a | |
# temporary workaround for dependancy watching holding open too many | |
# files: https://app.asana.com/0/364581412985/472479912325 | |
if [ "$(ulimit -n)" != "unlimited" ] ; then | |
ulimit -n 16384 > /dev/null 2>&1 || \ | |
ulimit -n 8192 > /dev/null 2>&1 || \ | |
ulimit -n 4096 > /dev/null 2>&1 || \ | |
ulimit -n 2048 > /dev/null 2>&1 || \ | |
ulimit -n 1024 > /dev/null 2>&1 || \ | |
ulimit -n 512 > /dev/null 2>&1 | |
fi | |
NPM_GLOBAL_PATH=$(npm root -g) | |
METEOR_THIRD_PARTY="$DEV_BUNDLE/app/lib/third" | |
case $(basename $0) in | |
meteor) | |
export NODE_PATH="$DEV_BUNDLE/lib/node_modules" | |
exec "$DEV_BUNDLE/bin/node" "$METEOR" "$@" | |
;; | |
meteor-exec) | |
export NODE_PATH="$DEV_BUNDLE/lib/node_modules:$METEOR_THIRD_PARTY:$DEV_BUNDLE/packages:$NPM_GLOBAL_PATH" | |
exec "$DEV_BUNDLE/bin/node" "$@" | |
;; | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment