【问题标题】:Heroku NodeJS + CouchBase Custom BuildpackHeroku NodeJS + CouchBase 自定义构建包
【发布时间】:2013-05-21 15:46:59
【问题描述】:

我正在尝试将自定义 buildpack 与 NodeJS 和 CouchBase 模块/库放在一起

我已经使用 Vulcan 构建 libcouchbase 和 libvbucket 并让 buildpack 检索和解压缩两者的 tgz 文件。

那里看起来一切正常,但是当 npm 尝试安装 couchbase 模块时我收到错误:

我得到了一堆错误,但是这一行:

“../src/couchbase_impl.h:52:36:警告:libcouchbase/couchbase.h:没有这样的文件或目录”

让我认为它找不到 libcouchbase 库(这是可能的,因为它们不在通常的位置)。

我尝试在 Config Vars 中使用 CPPFLAGS="-I/app/vendor/couchbase/include/libcouchbase" 添加正确的路径,并将其作为编译阶段的一部分导出,但仍然没有运气。

这里是 Heroku 部署输出和编译/发布 buildpack 文件的要点: https://gist.github.com/ahamidi/5620503

任何帮助将不胜感激。

谢谢,

阿里

[更新 1]

我已经取得了一些进展,现在我可以在部署到 Heroku 时编译 slug。

关键是弄清楚 CouchNode 在添加要包含的自定义目录时查找的 ENV 变量。

在这种情况下,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"

slug 编译并部署了应用程序,但我现在在日志中得到一个不同的错误:

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

所以看起来 Node 看不到 libcouchbase 库目录。

【问题讨论】:

  • 由于 libcouchbase 2.0 不需要外部 libvbucket,它已经被捆绑到 libcouchbase 中并静态链接
  • 你的脚本使用了一些自定义的压缩包,为什么不使用官方网站的特定版本(可以在couchbase.com/develop/c找到)?
  • 我的印象是“首选”方法是使用目标环境构建二进制文件(在这种情况下实际上是在 Heroku Dyno 上构建)。
  • @avsej 好的,谢谢。我将删除 libvbucket。

标签: heroku couchbase buildpack


【解决方案1】:

对于任何好奇或遇到类似问题的人,这对我有用。

为了安装 couchbase npm 模块,我必须告诉它在哪里可以找到 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"

然后为了在我的应用程序中 require couchbase,我必须设置以下 Env 变量:

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

使用命令:

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

【讨论】:

    【解决方案2】:

    你应该设置CPPFLAGS="-I/app/vendor/couchbase/include" LDFLAGS="-L/app/vendor/couchbase/include -lcouchbase"

    【讨论】:

    • 我尝试按照你提到的设置环境变量,但我仍然得到同样的错误。我不确定它是否有帮助,但我解压缩 tarball 的路径是 /app/vendor/couchbase 此外,couchbase 头文件实际上并未列在 /app/vendor/couchbase/include 目录中。该目录有一个名为“libcouchbase”的子文件夹,其中包含实际文件。
    【解决方案3】:

    从您的脚本来看,您似乎只是在没有任何进一步工作的情况下解压缩 libcouchbase。您还应该构建并安装它。 node.js 客户端的典型魔法咒语是./configure --disable-plugins --disable-examples && make && sudo make install。我不确定 Heroku 是否需要 sudo 部分,可能只是 make install

    【讨论】:

    • 我已经使用 Vulcan 构建了 libcouchbase,所以包中包含二进制文件和构建的库
    猜你喜欢
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2013-06-03
    • 2012-08-07
    • 2015-01-09
    相关资源
    最近更新 更多