Skip to content

Instantly share code, notes, and snippets.

@ahamidi
Created May 21, 2013 15:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ahamidi/5620503 to your computer and use it in GitHub Desktop.
Save ahamidi/5620503 to your computer and use it in GitHub Desktop.
libcouchbase + NodeJS Heroku Buildpack
#!/usr/bin/env bash
# bin/compile <build-dir> <cache-dir>
# fail fast
set -e
# debug
# set -x
# clean up leaking environment
unset GIT_DIR
# config
SCONS_VERSION="1.2.0"
S3_BUCKET="heroku-buildpack-nodejs"
# parse and derive params
BUILD_DIR=$1
CACHE_DIR=$2
LP_DIR=`cd $(dirname $0); cd ..; pwd`
function error() {
echo " ! $*" >&2
exit 1
}
function mktmpdir() {
dir=$(mktemp -t node-$1-XXXX)
rm -rf $dir
mkdir -p $dir
echo $dir
}
function indent() {
c='s/^/ /'
case $(uname) in
Darwin) sed -l "$c";;
*) sed -u "$c";;
esac
}
function run_npm() {
command="$1"
cd $BUILD_DIR
HOME="$BUILD_DIR" $VENDORED_NODE/bin/node $VENDORED_NPM/cli.js $command 2>&1 | indent
if [ "${PIPESTATUS[*]}" != "0 0" ]; then
echo " ! Failed to $command dependencies with npm"
exit 1
fi
}
function get_libvbucket(){
cd $BUILD_DIR
mkdir -p $BUILD_DIR/vendor/couchbase
curl "https://s3.amazonaws.com/kurobase/libvbucket.tgz" -s -o - | tar -xz -C $BUILD_DIR/vendor/couchbase -f -
}
function get_libcouchbase(){
cd $BUILD_DIR
mkdir -p $BUILD_DIR/vendor/couchbase
curl "https://s3.amazonaws.com/kurobase/libcouchbase.tgz" -s -o - | tar -xz -C $BUILD_DIR/vendor/couchbase -f -
}
function couchbase_update_paths(){
CPPFLAGS="-I/app/vendor/couchbase/include/libcouchbase"
LDFLAGS="-L/app/vendor/couchbase/lib -Wl,-rpath,/app/vendor/couchbase/lib"
export CPPFLAGS LDFLAGS
}
function manifest_versions() {
curl "http://${S3_BUCKET}.s3.amazonaws.com/manifest.${1}" -s -o - | tr -s '\n' ' '
}
function resolve_version() {
available_versions="$1"
requested_version="$2"
default_version="$3"
args=""
for version in $available_versions; do args="${args} -v \"${version}\""; done
if [ "$2" == "" ]; then
args="${args} -r \"${default_version}\"";
else
args="${args} -r \"${requested_version}\"";
fi
evaluated_versions=$(eval $bootstrap_node/bin/node $LP_DIR/vendor/node-semver/bin/semver ${args} || echo "")
echo "$evaluated_versions" | tail -n 1
}
function package_engine_version() {
version=$(cat $BUILD_DIR/package.json | $bootstrap_node/bin/node $LP_DIR/vendor/json/json engines.$1 2>/dev/null)
if [ $? == 0 ]; then
echo $version | sed -e 's/\([<>=]\) /\1/g'
fi
}
function package_resolve_version() {
engine="$1"
resolved_version=$(resolve_version "${engine_versions[$engine]}" "${engine_requests[$engine]}" "${engine_defaults[$engine]}")
if [ "${resolved_version}" == "" ]; then
error "Requested engine $engine version ${engine_requests[$engine]} does not match available versions: ${engine_versions[$engine]}"
else
echo $resolved_version
fi
}
function package_download() {
engine="$1"
version="$2"
location="$3"
mkdir -p $location
package="http://${S3_BUCKET}.s3.amazonaws.com/$engine-$version.tgz"
curl $package -s -o - | tar xzf - -C $location
}
function cat_npm_debug_log() {
if [ -f $BUILD_DIR/npm-debug.log ]; then
cat $BUILD_DIR/npm-debug.log
fi
}
trap cat_npm_debug_log EXIT
bootstrap_node=$(mktmpdir bootstrap_node)
package_download "nodejs" "0.4.7" $bootstrap_node
# make some associative arrays
declare -A engine_versions
declare -A engine_defaults
declare -A engine_requests
engine_defaults["node"]="0.10.x"
engine_defaults["npm"]="1.2.x"
engine_versions["node"]=$(manifest_versions "nodejs")
engine_requests["node"]=$(package_engine_version "node")
engine_versions["npm"]=$(manifest_versions "npm")
engine_requests["npm"]=$(package_engine_version "npm")
echo "-----> Resolving engine versions"
# add a warning if no version of node specified
if [ "${engine_requests["node"]}" == "" ]; then
echo
echo "WARNING: No version of Node.js specified in package.json, see:" | indent
echo "https://devcenter.heroku.com/articles/nodejs-versions" | indent
echo
fi
NODE_VERSION=$(package_resolve_version "node")
echo "Using Node.js version: ${NODE_VERSION}" | indent
NPM_VERSION=$(package_resolve_version "npm")
echo "Using npm version: ${NPM_VERSION}" | indent
# cache directories
CACHE_STORE_DIR="$CACHE_DIR/node_modules/$NODE_VERSION/$NPM_VERSION"
CACHE_TARGET_DIR="$BUILD_DIR/node_modules"
# s3 packages
NODE_PACKAGE="http://${S3_BUCKET}.s3.amazonaws.com/nodejs-${NODE_VERSION}.tgz"
NPM_PACKAGE="http://${S3_BUCKET}.s3.amazonaws.com/npm-${NPM_VERSION}.tgz"
SCONS_PACKAGE="http://${S3_BUCKET}.s3.amazonaws.com/scons-${SCONS_VERSION}.tgz"
# vendor directories
VENDORED_NODE="$(mktmpdir node)"
VENDORED_NPM="$(mktmpdir npm)"
VENDORED_SCONS="$(mktmpdir scons)"
# download and unpack packages
echo "-----> Fetching Node.js binaries"
package_download "nodejs" "${NODE_VERSION}" "${VENDORED_NODE}"
package_download "npm" "${NPM_VERSION}" "${VENDORED_NPM}"
package_download "scons" "${SCONS_VERSION}" "${VENDORED_SCONS}"
# vendor node into the slug
PATH="$BUILD_DIR/bin:$PATH"
echo "-----> Vendoring node into slug"
mkdir -p "$BUILD_DIR/bin"
cp "$VENDORED_NODE/bin/node" "$BUILD_DIR/bin/node"
# setting up paths for building
PATH="$VENDORED_SCONS:$VENDORED_NODE/bin:$PATH"
INCLUDE_PATH="$VENDORED_NODE/include"
export CPATH="$INCLUDE_PATH"
export CPPPATH="$INCLUDE_PATH"
# install libvbucket
echo "-----> Downloading libvbucket"
get_libvbucket
echo "libvbucket downloaded" | indent
# install libcouchbase
echo "-----> Downloading libcouchbase"
get_libcouchbase
echo "libcouchbase downloaded" | indent
# update paths
echo "-----> Updating variables for Couchbase"
couchbase_update_paths
echo "Variables updated" | indent
# install dependencies with npm
echo "-----> Installing dependencies with npm"
run_npm "install --production"
run_npm "rebuild"
echo "Dependencies installed" | indent
echo "-----> Building runtime environment"
mkdir -p $BUILD_DIR/.profile.d
echo "export PATH=\"\$HOME/bin:\$HOME/node_modules/.bin:\$PATH\"" > $BUILD_DIR/.profile.d/nodejs.sh
-----> Fetching custom git buildpack... done
-----> Node.js app detected
-----> Resolving engine versions
Using Node.js version: 0.10.6
Using npm version: 1.2.21
-----> Fetching Node.js binaries
-----> Vendoring node into slug
-----> Downloading libvbucket
libvbucket downloaded
-----> Downloading libcouchbase
libcouchbase downloaded
-----> Updating variables for Couchbase
Variables updated
-----> Installing dependencies with npm
npm WARN package.json kb-web-api@0.0.0-1 No repository field.
npm WARN package.json kb-web-api@0.0.0-1 No readme data.
npm http GET https://registry.npmjs.org/restify
npm http GET https://registry.npmjs.org/raven
npm http GET https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/couchbase/0.0.12
npm http GET https://registry.npmjs.org/newrelic
npm http 200 https://registry.npmjs.org/coffee-script
npm http GET https://registry.npmjs.org/coffee-script/-/coffee-script-1.4.0.tgz
npm http 200 https://registry.npmjs.org/couchbase/0.0.12
npm http GET https://registry.npmjs.org/couchbase/-/couchbase-0.0.12.tgz
npm http 200 https://registry.npmjs.org/raven
npm http GET https://registry.npmjs.org/raven/-/raven-0.5.1.tgz
npm http 200 https://registry.npmjs.org/newrelic
npm http GET https://registry.npmjs.org/newrelic/-/newrelic-0.9.20.tgz
npm http 200 https://registry.npmjs.org/restify
npm http GET https://registry.npmjs.org/restify/-/restify-2.5.0.tgz
npm http 200 https://registry.npmjs.org/coffee-script/-/coffee-script-1.4.0.tgz
npm http 200 https://registry.npmjs.org/couchbase/-/couchbase-0.0.12.tgz
npm http 200 https://registry.npmjs.org/raven/-/raven-0.5.1.tgz
npm http 200 https://registry.npmjs.org/newrelic/-/newrelic-0.9.20.tgz
npm http 200 https://registry.npmjs.org/restify/-/restify-2.5.0.tgz
npm http GET https://registry.npmjs.org/node-uuid/1.4.0
npm http GET https://registry.npmjs.org/raw-stacktrace/0.0.2
npm http 200 https://registry.npmjs.org/raw-stacktrace/0.0.2
npm http 200 https://registry.npmjs.org/node-uuid/1.4.0
npm http GET https://registry.npmjs.org/raw-stacktrace/-/raw-stacktrace-0.0.2.tgz
npm http GET https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.0.tgz
npm http GET https://registry.npmjs.org/bunyan/0.21.1
npm http GET https://registry.npmjs.org/formidable/1.0.14
npm http GET https://registry.npmjs.org/deep-equal/0.0.0
npm http GET https://registry.npmjs.org/http-signature/0.10.0
npm http GET https://registry.npmjs.org/escape-regexp-component/1.0.2
npm http GET https://registry.npmjs.org/keep-alive-agent/0.0.1
npm http GET https://registry.npmjs.org/lru-cache/2.3.0
npm http GET https://registry.npmjs.org/mime/1.2.9
npm http GET https://registry.npmjs.org/negotiator/0.2.5
npm http GET https://registry.npmjs.org/once/1.1.1
npm http GET https://registry.npmjs.org/qs/0.6.4
npm http GET https://registry.npmjs.org/semver/1.1.4
npm http GET https://registry.npmjs.org/spdy/1.8.2
npm http GET https://registry.npmjs.org/verror/1.3.6
npm http GET https://registry.npmjs.org/dtrace-provider/0.2.8
npm http GET https://registry.npmjs.org/assert-plus/0.1.2
npm http GET https://registry.npmjs.org/backoff/2.2.0
npm http GET https://registry.npmjs.org/bindings
npm http 200 https://registry.npmjs.org/raw-stacktrace/-/raw-stacktrace-0.0.2.tgz
npm http 200 https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.0.tgz
npm http 200 https://registry.npmjs.org/escape-regexp-component/1.0.2
npm http GET https://registry.npmjs.org/escape-regexp-component/-/escape-regexp-component-1.0.2.tgz
npm WARN engine raw-stacktrace@0.0.2: wanted: {"node":"~0.6.8"} (current: {"node":"v0.10.6","npm":"1.2.21"})
npm http 200 https://registry.npmjs.org/deep-equal/0.0.0
npm http GET https://registry.npmjs.org/traceback
npm http GET https://registry.npmjs.org/underscore
npm http GET https://registry.npmjs.org/deep-equal/-/deep-equal-0.0.0.tgz
npm http 200 https://registry.npmjs.org/formidable/1.0.14
npm http 200 https://registry.npmjs.org/http-signature/0.10.0
npm http 200 https://registry.npmjs.org/bunyan/0.21.1
npm http GET https://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz
npm http GET https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz
npm http GET https://registry.npmjs.org/bunyan/-/bunyan-0.21.1.tgz
npm http 200 https://registry.npmjs.org/keep-alive-agent/0.0.1
npm http GET https://registry.npmjs.org/keep-alive-agent/-/keep-alive-agent-0.0.1.tgz
npm http 200 https://registry.npmjs.org/lru-cache/2.3.0
npm http GET https://registry.npmjs.org/lru-cache/-/lru-cache-2.3.0.tgz
npm http 200 https://registry.npmjs.org/mime/1.2.9
npm http 200 https://registry.npmjs.org/once/1.1.1
npm http 200 https://registry.npmjs.org/negotiator/0.2.5
npm http GET https://registry.npmjs.org/mime/-/mime-1.2.9.tgz
npm http GET https://registry.npmjs.org/once/-/once-1.1.1.tgz
npm http GET https://registry.npmjs.org/negotiator/-/negotiator-0.2.5.tgz
npm http 200 https://registry.npmjs.org/qs/0.6.4
npm http GET https://registry.npmjs.org/qs/-/qs-0.6.4.tgz
npm http 200 https://registry.npmjs.org/semver/1.1.4
npm http GET https://registry.npmjs.org/semver/-/semver-1.1.4.tgz
npm http 200 https://registry.npmjs.org/escape-regexp-component/-/escape-regexp-component-1.0.2.tgz
npm http 200 https://registry.npmjs.org/verror/1.3.6
npm http 200 https://registry.npmjs.org/spdy/1.8.2
npm http 200 https://registry.npmjs.org/dtrace-provider/0.2.8
npm http GET https://registry.npmjs.org/verror/-/verror-1.3.6.tgz
npm http GET https://registry.npmjs.org/spdy/-/spdy-1.8.2.tgz
npm http GET https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.2.8.tgz
npm http 200 https://registry.npmjs.org/assert-plus/0.1.2
npm http GET https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz
npm WARN package.json escape-regexp-component@1.0.2 No repository field.
npm http 200 https://registry.npmjs.org/deep-equal/-/deep-equal-0.0.0.tgz
npm http 200 https://registry.npmjs.org/backoff/2.2.0
npm http GET https://registry.npmjs.org/backoff/-/backoff-2.2.0.tgz
npm http 200 https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz
npm http 200 https://registry.npmjs.org/keep-alive-agent/-/keep-alive-agent-0.0.1.tgz
npm http 200 https://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz
npm http 200 https://registry.npmjs.org/bunyan/-/bunyan-0.21.1.tgz
npm http 200 https://registry.npmjs.org/bindings
npm http GET https://registry.npmjs.org/bindings/-/bindings-1.0.0.tgz
npm http 200 https://registry.npmjs.org/traceback
npm http 200 https://registry.npmjs.org/lru-cache/-/lru-cache-2.3.0.tgz
npm http GET https://registry.npmjs.org/traceback/-/traceback-0.3.0.tgz
npm http 200 https://registry.npmjs.org/underscore
npm http GET https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz
npm http 200 https://registry.npmjs.org/once/-/once-1.1.1.tgz
npm http 200 https://registry.npmjs.org/mime/-/mime-1.2.9.tgz
npm http 200 https://registry.npmjs.org/negotiator/-/negotiator-0.2.5.tgz
npm http 200 https://registry.npmjs.org/qs/-/qs-0.6.4.tgz
npm http 200 https://registry.npmjs.org/verror/-/verror-1.3.6.tgz
npm http 200 https://registry.npmjs.org/semver/-/semver-1.1.4.tgz
npm http 200 https://registry.npmjs.org/spdy/-/spdy-1.8.2.tgz
npm http 200 https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.2.8.tgz
npm http 200 https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz
npm http 200 https://registry.npmjs.org/backoff/-/backoff-2.2.0.tgz
npm http 200 https://registry.npmjs.org/bindings/-/bindings-1.0.0.tgz
npm http 200 https://registry.npmjs.org/traceback/-/traceback-0.3.0.tgz
npm http 200 https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz
npm WARN package.json assert-plus@0.1.2 No repository field.
> couchbase@0.0.12 install /tmp/build_2gyph02egfdcn/node_modules/couchbase
> node-gyp rebuild
gyp http GET http://nodejs.org/dist/v0.10.6/node-v0.10.6.tar.gz
gyp http 200 http://nodejs.org/dist/v0.10.6/node-v0.10.6.tar.gz
npm http GET https://registry.npmjs.org/asn1/0.1.11
npm http GET https://registry.npmjs.org/ctype/0.5.2
npm http GET https://registry.npmjs.org/extsprintf/1.0.2
> dtrace-provider@0.2.8 install /tmp/build_2gyph02egfdcn/node_modules/restify/node_modules/dtrace-provider
> node-gyp rebuild
npm http GET https://registry.npmjs.org/mv/0.0.5
npm http 200 https://registry.npmjs.org/asn1/0.1.11
npm http 200 https://registry.npmjs.org/ctype/0.5.2
npm http GET https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz
npm http GET https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz
npm http 200 https://registry.npmjs.org/extsprintf/1.0.2
npm http GET https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz
gyp http GET http://nodejs.org/dist/v0.10.6/node-v0.10.6.tar.gz
gyp http 200 http://nodejs.org/dist/v0.10.6/node-v0.10.6.tar.gz
npm http 200 https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz
npm http 200 https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz
npm http 200 https://registry.npmjs.org/mv/0.0.5
npm http GET https://registry.npmjs.org/mv/-/mv-0.0.5.tgz
npm http 200 https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz
npm WARN package.json ctype@0.5.2 No repository field.
npm http 200 https://registry.npmjs.org/mv/-/mv-0.0.5.tgz
make: Entering directory `/tmp/build_2gyph02egfdcn/node_modules/couchbase/build'
CXX(target) Release/obj.target/couchbase_impl/src/couchbase_impl.o
In file included from ../src/couchbase_impl.cc:21:
../src/couchbase_impl.h:52:36: warning: libcouchbase/couchbase.h: No such file or directory
npm http GET https://registry.npmjs.org/bunyan
npm http 200 https://registry.npmjs.org/bunyan
npm http GET https://registry.npmjs.org/bunyan/-/bunyan-0.14.6.tgz
In file included from ../src/couchbase_impl.h:54,
from ../src/couchbase_impl.cc:21:
../src/cookie.h:22: error: 'lcb_error_t' has not been declared
../src/cookie.h:23: error: 'lcb_size_t' has not been declared
../src/cookie.h:24: error: 'lcb_cas_t' has not been declared
../src/cookie.h:25: error: 'lcb_observe_t' has not been declared
../src/cookie.h:27: error: 'lcb_time_t' has not been declared
../src/cookie.h:28: error: 'lcb_time_t' has not been declared
../src/cookie.h:30: error: 'lcb_error_t' has not been declared
../src/cookie.h:31: error: 'lcb_size_t' has not been declared
../src/cookie.h:33: error: 'lcb_size_t' has not been declared
../src/cookie.h:34: error: 'lcb_uint32_t' has not been declared
../src/cookie.h:35: error: 'lcb_cas_t' has not been declared
../src/cookie.h:37: error: 'lcb_error_t' has not been declared
../src/cookie.h:38: error: 'lcb_size_t' has not been declared
../src/cookie.h:39: error: 'lcb_cas_t' has not been declared
../src/cookie.h:41: error: 'lcb_error_t' has not been declared
../src/cookie.h:42: error: 'lcb_size_t' has not been declared
../src/cookie.h:43: error: 'lcb_uint64_t' has not been declared
../src/cookie.h:44: error: 'lcb_cas_t' has not been declared
../src/cookie.h:46: error: 'lcb_error_t' has not been declared
../src/cookie.h:47: error: 'lcb_size_t' has not been declared
../src/cookie.h:49: error: 'lcb_error_t' has not been declared
../src/cookie.h:49: error: ISO C++ forbids declaration of 'lcb_http_resp_t' with no type
../src/cookie.h:49: error: expected ',' or '...' before '*' token
In file included from ../src/couchbase_impl.h:55,
from ../src/couchbase_impl.cc:21:
../src/operations.h:39: error: 'lcb_error_t' does not name a type
../src/operations.h:45: error: 'lcb_error_t' has not been declared
../src/operations.h:70: error: 'lcb_error_t' does not name a type
../src/operations.h:75: error: 'lcb_error_t' has not been declared
../src/operations.h:79: error: 'lcb_store_cmd_t' does not name a type
../src/operations.h: In constructor 'Couchnode::StoreOperation::StoreOperation()':
../src/operations.h:62: error: class 'Couchnode::StoreOperation' does not have any field named 'cmd'
../src/operations.h: In destructor 'virtual Couchnode::StoreOperation::~StoreOperation()':
../src/operations.h:64: error: 'cmd' was not declared in this scope
../src/operations.h: In member function 'virtual void Couchnode::StoreOperation::cancel(int)':
../src/operations.h:76: error: 'cmd' was not declared in this scope
../src/operations.h: At global scope:
../src/operations.h:96: error: 'lcb_error_t' does not name a type
../src/operations.h:100: error: 'lcb_error_t' has not been declared
../src/operations.h:108: error: ISO C++ forbids declaration of 'lcb_get_cmd_t' with no type
../src/operations.h:108: error: expected ';' before '*' token
../src/operations.h: In constructor 'Couchnode::GetOperation::GetOperation()':
../src/operations.h:85: error: class 'Couchnode::GetOperation' does not have any field named 'cmds'
../src/operations.h: In destructor 'virtual Couchnode::GetOperation::~GetOperation()':
../src/operations.h:88: error: 'cmds' was not declared in this scope
../src/operations.h:91: error: 'cmds' was not declared in this scope
../src/operations.h: In member function 'virtual void Couchnode::GetOperation::cancel(int)':
../src/operations.h:102: error: 'cmds' was not declared in this scope
../src/operations.h: At global scope:
../src/operations.h:125: error: 'lcb_error_t' does not name a type
../src/operations.h:129: error: 'lcb_error_t' has not been declared
../src/operations.h:137: error: ISO C++ forbids declaration of 'lcb_get_cmd_t' with no type
../src/operations.h:137: error: expected ';' before '*' token
../src/operations.h: In constructor 'Couchnode::GetAndLockOperation::GetAndLockOperation()':
../src/operations.h:114: error: class 'Couchnode::GetAndLockOperation' does not have any field named 'cmds'
../src/operations.h: In destructor 'virtual Couchnode::GetAndLockOperation::~GetAndLockOperation()':
../src/operations.h:117: error: 'cmds' was not declared in this scope
../src/operations.h:120: error: 'cmds' was not declared in this scope
../src/operations.h: In member function 'virtual void Couchnode::GetAndLockOperation::cancel(int)':
../src/operations.h:131: error: 'cmds' was not declared in this scope
../src/operations.h: At global scope:
../src/operations.h:154: error: 'lcb_error_t' does not name a type
../src/operations.h:158: error: 'lcb_error_t' has not been declared
../src/operations.h:166: error: ISO C++ forbids declaration of 'lcb_unlock_cmd_t' with no type
../src/operations.h:166: error: expected ';' before '*' token
../src/operations.h: In constructor 'Couchnode::UnlockOperation::UnlockOperation()':
../src/operations.h:143: error: class 'Couchnode::UnlockOperation' does not have any field named 'cmds'
../src/operations.h: In destructor 'virtual Couchnode::UnlockOperation::~UnlockOperation()':
../src/operations.h:146: error: 'cmds' was not declared in this scope
../src/operations.h:149: error: 'cmds' was not declared in this scope
../src/operations.h: In member function 'virtual void Couchnode::UnlockOperation::cancel(int)':
../src/operations.h:160: error: 'cmds' was not declared in this scope
../src/operations.h: At global scope:
../src/operations.h:179: error: 'lcb_error_t' does not name a type
../src/operations.h:184: error: 'lcb_error_t' has not been declared
../src/operations.h:188: error: 'lcb_touch_cmd_t' does not name a type
../src/operations.h: In constructor 'Couchnode::TouchOperation::TouchOperation()':
../src/operations.h:172: error: class 'Couchnode::TouchOperation' does not have any field named 'cmd'
../src/operations.h: In destructor 'virtual Couchnode::TouchOperation::~TouchOperation()':
../src/operations.h:174: error: 'cmd' was not declared in this scope
../src/operations.h: In member function 'virtual void Couchnode::TouchOperation::cancel(int)':
../src/operations.h:185: error: 'cmd' was not declared in this scope
../src/operations.h: At global scope:
../src/operations.h:202: error: 'lcb_error_t' does not name a type
../src/operations.h:208: error: 'lcb_error_t' has not been declared
../src/operations.h:213: error: 'lcb_observe_cmd_t' does not name a type
../src/operations.h: In constructor 'Couchnode::ObserveOperation::ObserveOperation()':
../src/operations.h:194: error: class 'Couchnode::ObserveOperation' does not have any field named 'cmd'
../src/operations.h: In destructor 'virtual Couchnode::ObserveOperation::~ObserveOperation()':
../src/operations.h:196: error: 'cmd' was not declared in this scope
../src/operations.h: In member function 'virtual void Couchnode::ObserveOperation::cancel(int)':
../src/operations.h:209: error: 'cmd' was not declared in this scope
../src/operations.h: At global scope:
../src/operations.h:227: error: 'lcb_error_t' does not name a type
../src/operations.h:232: error: 'lcb_error_t' has not been declared
../src/operations.h:237: error: 'lcb_remove_cmd_t' does not name a type
../src/operations.h: In constructor 'Couchnode::RemoveOperation::RemoveOperation()':
../src/operations.h:219: error: class 'Couchnode::RemoveOperation' does not have any field named 'cmd'
../src/operations.h: In destructor 'virtual Couchnode::RemoveOperation::~RemoveOperation()':
../src/operations.h:221: error: 'cmd' was not declared in this scope
../src/operations.h: In member function 'virtual void Couchnode::RemoveOperation::cancel(int)':
../src/operations.h:233: error: 'cmd' was not declared in this scope
../src/operations.h: At global scope:
../src/operations.h:251: error: 'lcb_error_t' does not name a type
../src/operations.h:256: error: 'lcb_error_t' has not been declared
../src/operations.h:260: error: 'lcb_arithmetic_cmd_t' does not name a type
../src/operations.h: In constructor 'Couchnode::ArithmeticOperation::ArithmeticOperation()':
../src/operations.h:243: error: class 'Couchnode::ArithmeticOperation' does not have any field named 'cmd'
../src/operations.h: In destructor 'virtual Couchnode::ArithmeticOperation::~ArithmeticOperation()':
../src/operations.h:245: error: 'cmd' was not declared in this scope
../src/operations.h: In member function 'virtual void Couchnode::ArithmeticOperation::cancel(int)':
../src/operations.h:257: error: 'cmd' was not declared in this scope
../src/operations.h: At global scope:
../src/operations.h:271: error: 'lcb_error_t' does not name a type
../src/operations.h:281: error: 'lcb_error_t' has not been declared
../src/operations.h:287: error: 'lcb_http_cmd_t' does not name a type
../src/operations.h: In constructor 'Couchnode::HttpOperation::HttpOperation()':
../src/operations.h:267: error: class 'Couchnode::HttpOperation' does not have any field named 'cmd'
../src/operations.h:268: error: 'cmd' was not declared in this scope
../src/operations.h: In member function 'virtual void Couchnode::HttpOperation::cancel(int)':
../src/operations.h:282: error: ISO C++ forbids declaration of 'type name' with no type
../src/operations.h:282: error: ISO C++ forbids declaration of 'type name' with no type
../src/operations.h:282: error: expected primary-expression before 'const'
../src/operations.h:282: error: expected ')' before 'const'
../src/operations.h: In constructor 'Couchnode::GetDesignDocOperation::GetDesignDocOperation()':
../src/operations.h:294: error: 'cmd' was not declared in this scope
../src/operations.h:294: error: 'LCB_HTTP_METHOD_GET' was not declared in this scope
../src/operations.h: In constructor 'Couchnode::DeleteDesignDocOperation::DeleteDesignDocOperation()':
../src/operations.h:306: error: 'cmd' was not declared in this scope
../src/operations.h:306: error: 'LCB_HTTP_METHOD_DELETE' was not declared in this scope
../src/operations.h: In constructor 'Couchnode::SetDesignDocOperation::SetDesignDocOperation()':
../src/operations.h:313: error: 'cmd' was not declared in this scope
../src/operations.h:313: error: 'LCB_HTTP_METHOD_PUT' was not declared in this scope
../src/operations.h: In constructor 'Couchnode::ViewOperation::ViewOperation()':
../src/operations.h:321: error: 'cmd' was not declared in this scope
../src/operations.h:321: error: 'LCB_HTTP_METHOD_GET' was not declared in this scope
In file included from ../src/couchbase_impl.cc:21:
../src/couchbase_impl.h: At global scope:
../src/couchbase_impl.h:65: error: expected ')' before 'inst'
../src/couchbase_impl.h:102: error: 'lcb_configuration_t' has not been declared
../src/couchbase_impl.h:105: error: 'lcb_error_t' has not been declared
../src/couchbase_impl.h:113: error: 'lcb_error_t' has not been declared
../src/couchbase_impl.h:119: error: 'lcb_t' does not name a type
../src/couchbase_impl.h:133: error: 'lcb_t' does not name a type
../src/couchbase_impl.h:134: error: 'lcb_error_t' does not name a type
../src/couchbase_impl.h: In member function 'void Couchnode::CouchbaseImpl::setLastError(int)':
../src/couchbase_impl.h:114: error: 'lastError' was not declared in this scope
In file included from ../src/couchbase_impl.cc:22:
../src/ioplugin.h: At global scope:
../src/ioplugin.h:22: error: expected constructor, destructor, or type conversion before '*' token
../src/couchbase_impl.cc:55: error: expected ')' before 'inst'
../src/couchbase_impl.cc: In destructor 'virtual Couchnode::CouchbaseImpl::~CouchbaseImpl()':
../src/couchbase_impl.cc:74: error: 'instance' was not declared in this scope
../src/couchbase_impl.cc:75: error: 'lcb_destroy' was not declared in this scope
npm http 200 https://registry.npmjs.org/bunyan/-/bunyan-0.14.6.tgz
../src/couchbase_impl.cc: In static member function 'static v8::Handle<v8::Value> Couchnode::CouchbaseImpl::New(const v8::Arguments&)':
../src/couchbase_impl.cc:194: error: 'lcb_io_opt_st' was not declared in this scope
../src/couchbase_impl.cc:194: error: 'iops' was not declared in this scope
../src/couchbase_impl.cc:194: error: 'createIoOps' is not a member of 'Couchnode'
../src/couchbase_impl.cc:199: error: 'lcb_create_st' was not declared in this scope
../src/couchbase_impl.cc:199: error: expected ';' before 'createOptions'
../src/couchbase_impl.cc:201: error: 'lcb_t' was not declared in this scope
../src/couchbase_impl.cc:201: error: expected ';' before 'instance'
../src/couchbase_impl.cc:202: error: 'lcb_error_t' was not declared in this scope
../src/couchbase_impl.cc:202: error: expected ';' before 'err'
../src/couchbase_impl.cc:207: error: 'err' was not declared in this scope
../src/couchbase_impl.cc:207: error: 'LCB_SUCCESS' was not declared in this scope
../src/couchbase_impl.cc:211: error: 'instance' was not declared in this scope
../src/couchbase_impl.cc:211: error: 'lcb_connect' was not declared in this scope
../src/couchbase_impl.cc:211: error: 'LCB_SUCCESS' was not declared in this scope
../src/couchbase_impl.cc:215: error: 'instance' was not declared in this scope
../src/couchbase_impl.cc: In static member function 'static v8::Handle<v8::Value> Couchnode::CouchbaseImpl::StrError(const v8::Arguments&)':
../src/couchbase_impl.cc:225: error: 'lcb_error_t' was not declared in this scope
../src/couchbase_impl.cc:225: error: expected ';' before 'errorCode'
../src/couchbase_impl.cc:226: error: 'class Couchnode::CouchbaseImpl' has no member named 'instance'
../src/couchbase_impl.cc:226: error: 'errorCode' was not declared in this scope
../src/couchbase_impl.cc:226: error: 'lcb_strerror' was not declared in this scope
../src/couchbase_impl.cc: In static member function 'static v8::Handle<v8::Value> Couchnode::CouchbaseImpl::GetVersion(const v8::Arguments&)':
../src/couchbase_impl.cc:237: error: 'lcb_get_version' was not declared in this scope
../src/couchbase_impl.cc: In static member function 'static v8::Handle<v8::Value> Couchnode::CouchbaseImpl::SetTimeout(const v8::Arguments&)':
../src/couchbase_impl.cc:253: error: 'class Couchnode::CouchbaseImpl' has no member named 'instance'
../src/couchbase_impl.cc:253: error: 'lcb_set_timeout' was not declared in this scope
../src/couchbase_impl.cc: In static member function 'static v8::Handle<v8::Value> Couchnode::CouchbaseImpl::GetTimeout(const v8::Arguments&)':
../src/couchbase_impl.cc:266: error: 'class Couchnode::CouchbaseImpl' has no member named 'instance'
../src/couchbase_impl.cc:266: error: 'lcb_get_timeout' was not declared in this scope
../src/couchbase_impl.cc: In static member function 'static v8::Handle<v8::Value> Couchnode::CouchbaseImpl::GetRestUri(const v8::Arguments&)':
../src/couchbase_impl.cc:278: error: 'class Couchnode::CouchbaseImpl' has no member named 'instance'
../src/couchbase_impl.cc:278: error: 'lcb_get_host' was not declared in this scope
../src/couchbase_impl.cc:279: error: 'class Couchnode::CouchbaseImpl' has no member named 'instance'
../src/couchbase_impl.cc:279: error: 'lcb_get_port' was not declared in this scope
../src/couchbase_impl.cc: In static member function 'static v8::Handle<v8::Value> Couchnode::CouchbaseImpl::SetSynchronous(const v8::Arguments&)':
../src/couchbase_impl.cc:294: error: 'lcb_syncmode_t' was not declared in this scope
../src/couchbase_impl.cc:294: error: expected ';' before 'mode'
../src/couchbase_impl.cc:296: error: 'mode' was not declared in this scope
../src/couchbase_impl.cc:296: error: 'LCB_SYNCHRONOUS' was not declared in this scope
../src/couchbase_impl.cc:298: error: 'mode' was not declared in this scope
../src/couchbase_impl.cc:298: error: 'LCB_ASYNCHRONOUS' was not declared in this scope
../src/couchbase_impl.cc:301: error: 'class Couchnode::CouchbaseImpl' has no member named 'instance'
../src/couchbase_impl.cc:301: error: 'mode' was not declared in this scope
../src/couchbase_impl.cc:301: error: 'lcb_behavior_set_syncmode' was not declared in this scope
../src/couchbase_impl.cc: In static member function 'static v8::Handle<v8::Value> Couchnode::CouchbaseImpl::IsSynchronous(const v8::Arguments&)':
../src/couchbase_impl.cc:313: error: 'class Couchnode::CouchbaseImpl' has no member named 'instance'
../src/couchbase_impl.cc:313: error: 'lcb_behavior_get_syncmode' was not declared in this scope
../src/couchbase_impl.cc:314: error: 'LCB_SYNCHRONOUS' was not declared in this scope
../src/couchbase_impl.cc: In static member function 'static v8::Handle<v8::Value> Couchnode::CouchbaseImpl::GetLastError(const v8::Arguments&)':
../src/couchbase_impl.cc:329: error: 'class Couchnode::CouchbaseImpl' has no member named 'instance'
../src/couchbase_impl.cc:329: error: 'class Couchnode::CouchbaseImpl' has no member named 'lastError'
../src/couchbase_impl.cc:329: error: 'lcb_strerror' was not declared in this scope
../src/couchbase_impl.cc: At global scope:
../src/couchbase_impl.cc:333: error: variable or field 'errorCallback' declared void
../src/couchbase_impl.cc:333: error: 'lcb_error_t' was not declared in this scope
../src/couchbase_impl.cc:333: error: expected primary-expression before 'const'
make: *** [Release/obj.target/couchbase_impl/src/couchbase_impl.o] Error 1
make: Leaving directory `/tmp/build_2gyph02egfdcn/node_modules/couchbase/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/tmp/node-npm-zOoc/node_modules/node-gyp/lib/build.js:267:23)
gyp ERR! stack at ChildProcess.EventEmitter.emit (events.js:98:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:789:12)
gyp ERR! System Linux 2.6.32-351-ec2
gyp ERR! command "node" "/tmp/node-npm-zOoc/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /tmp/build_2gyph02egfdcn/node_modules/couchbase
gyp ERR! node -v v0.10.6
gyp ERR! node-gyp -v v0.9.5
gyp ERR! not ok
npm ERR! weird error 1
make: Entering directory `/tmp/build_2gyph02egfdcn/node_modules/restify/node_modules/dtrace-provider/build'
TOUCH Release/obj.target/DTraceProviderStub.stamp
make: Leaving directory `/tmp/build_2gyph02egfdcn/node_modules/restify/node_modules/dtrace-provider/build'
npm ERR! not ok code 0
! Failed to install --production dependencies with npm
! Heroku push rejected, failed to compile Node.js app
#!/usr/bin/env bash
# bin/release <build-dir>
cat <<EOF
---
config_vars:
PATH: /app/vendor/couchbase/bin:bin:node_modules/.bin:/usr/local/bin:/usr/bin:/bin
EOF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment