2013-05-21 4 views
0

Я пытаюсь собрать пользовательский buildpack с NodeJS и модуль CouchBase/библиотекамиHeroku NodeJS + CouchBase Пользовательского Buildpack

Я получил по мере использования Vulcan строить libcouchbase и libvbucket и получить buildpack к извлекать и распаковывать файлы tgz для обоих.

Все выглядит нормально, но я получаю ошибки при НОМ пытается установить модуль couchbase:

я получаю кучу ошибок, но эта строка:

»../src/couchbase_impl.h : 52: 36: warning: libcouchbase/couchbase.h: Нет такого файла или каталога «

приводит меня к мысли, что он не может найти библиотеки libcouchbase (что возможно, поскольку они не в обычном месте) ,

Я попытался добавить правильный путь, используя CPPFLAGS = "- I/app/vendor/couchbase/include/libcouchbase" в обоих конфигурационных Vars и только экспортируя это как часть фазы компиляции, но все равно не повезло ,

Вот суть с Heroku развернуть выход и/отпускание buildpack файлы компиляции: https://gist.github.com/ahamidi/5620503

Любая помощь будет принята с благодарностью.

Спасибо,

Али

[Update 1]

Я сделал некоторый прогресс, и теперь я могу получить пулю, чтобы компилировать при развертывании Heroku.

Ключ определял переменные ENV, которые ищет CouchNode при добавлении настраиваемых каталогов.

В этом случае переменными Env были EXTRA_CPPFLAGS и EXTRA_LDFLAGS.

Так я обновил файл компиляции, чтобы включить следующее:

export EXTRA_CPPFLAGS="-I$BUILD_DIR/vendor/couchbase/include" 
export EXTRA_LDFLAGS="-L$BUILD_DIR/vendor/couchbase/lib -Wl,-rpath,$BUILD_DIR/vendor/couchbase/lib" 

Слизняк компилирует и приложение развертывается, но теперь я получаю другую ошибку в журналах:

Error: libcouchbase.so.2: cannot open shared object file: No such file or directory 

Так похоже, что Node не может видеть каталог библиотек libcouchbase.

+0

Поскольку libcouchbase 2.0 вам не нужен внешний libvbucket, он был добавлен в libcouchbase и ссылки статически – avsej

+0

Ваш скрипт использует некоторые настраиваемые tarballs, почему бы не использовать определенную версию с официального сайта (можно найти по адресу http: // couchbase. ком/разработки/с)? – avsej

+0

У меня создалось впечатление, что «предпочтительным» подходом было создание двоичных файлов, использующих целевые среды (в данном случае фактически построенные на процессоре Heroku Dyno). –

ответ

0

Для тех, кто интересуется или испытывает подобную проблему, вот что сработало для меня.

Для того, чтобы получить модуль couchbase НПМ для установки я должен был сказать ему, где найти библиотеки libcouchbase (в файле компиляции):

export EXTRA_CPPFLAGS="-I$BUILD_DIR/vendor/couchbase/include" 
export EXTRA_LDFLAGS="-L$BUILD_DIR/vendor/couchbase/lib -Wl,-rpath,$BUILD_DIR/vendor/couchbase/lib" 

Тогда для того, чтобы требуют couchbase в моем приложении I было установлено следующее: переменная окружения

LD_LIBRARY_PATH="/app/vendor/couchbase/lib:$LD_LIBRARY_PATH" 

с помощью команды:

heroku config:add LD_LIBRARY_PATH="/app/vendor/couchbase/lib:$LD_LIBRARY_PATH" 
0

Вы должны установить CPPFLAGS="-I/app/vendor/couchbase/include" LDFLAGS="-L/app/vendor/couchbase/include -lcouchbase"

+0

Я попытался установить переменные Env, как вы упомянули, но я все равно получаю ту же ошибку. Я не уверен, что это помогает, но путь, в котором я распаковываю tarball, является/app/vendor/couchbase Кроме того, файлы заголовков couchbase на самом деле не перечислены в каталоге/app/vendor/couchbase/include , В этом каталоге есть подпапка с именем «libcouchbase», в которой хранятся фактические файлы. –

0

из вашего сценария, кажется, что вы просто распаковка libcouchbase без какой-либо дополнительной работы. вы также должны построить его и установить. типичное магическое заклинание для node.js-клиента будет ./configure --disable-plugins --disable-examples && make && sudo make install. Я не уверен, нужна ли sudo часть на героку, возможно только make install

+0

Я уже создал libcouchbase с помощью Vulcan, поэтому пакет включает двоичные файлы и встроенные библиотеки –

Смежные вопросы