Created
May 21, 2013 15:02
-
-
Save ahamidi/5620503 to your computer and use it in GitHub Desktop.
libcouchbase + NodeJS Heroku Buildpack
This file contains 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
#!/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 | |
This file contains 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
-----> 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 |
This file contains 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
#!/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