函数运行环境系统动态链接库版本太低?函数计算 fun 分忧解难-阿里云开发者社区

开发者社区> txd123> 正文

函数运行环境系统动态链接库版本太低?函数计算 fun 分忧解难

简介:
+关注继续查看

场景介绍

用户问题

简要描述一下用户当时遇到的问题:

用户使用函数计算的 nodejs8 runtime,在本地自己的开发环境使用 npm install couchbase 安装了 couchbase 这个第三方库。couchbase 封装了 C 库,依赖系统底层动态链接库 libstdc++.so.6。因为用户自己的开发环境的操作系统内核比较新,所以本地安装、编译和调试都比较顺利。所以,最后按照函数计算的打包方式成功创建了 Function,但是执行 InvokeFunction 时,遇到了这样的错误:

"errorMessage": "/usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /code/node_modules/couchbase/build/Release/couchbase_impl.node)",
    "errorType": "Error",
    "stackTrace": [
        "Error: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /code/node_modules/couchbase/build/Release/couchbase_impl.node)",
...

错误发生的原因如堆栈描述,即没有 CXXABI_1.3.9 这个版本,couchbase 2.6.5 版本已经修复了该问题,即使环境中没有CXXABI_1.3.9 这个版本也是可以使用的,可以直接使用 fun 工具直接安装该模块,但是需要确保 package.json 中 couchbase 版本在 2.6.5 以上即可。

下面我们就详细介绍一下利用 fun 工具安装 couchbase 模块的步骤。

代码项目搭建

前提:先按照 fun 的安装步骤安装 fun工具,并进行 fun config 配置。

在本地很快搭建了一个项目目录:

- test_code/
  - index.js
  - template.yml
  - Funfile
  

其中 index.js , template.yml 和 Funfile 的 内容分别为

# index.js
const couchbase = require('couchbase');

module.exports.handler = function(event, context, callback) {
    var cluster = new couchbase.Cluster('couchbase://127.0.0.1', {
        username: 'username',
        password: 'password',
      });
    var bucket = cluster.bucket('default');
    var coll = bucket.defaultCollection();
    coll.upsert('testdoc', {name:'Frank'}, (err, res) => {
        if (err) throw err;
       
        coll.get('testdoc', (err, res) => {
          if (err) throw err;
       
          console.log(res.value);
          // {name: Frank}
        });
      });
    callback(null, {
        hello: 'world'
    })
}


#template.yml 
ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
  fc: # service name
    Type: 'Aliyun::Serverless::Service'
    Properties:
      Description: 'fc test'
    helloworld: # function name
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Handler: index.handler
        Runtime: nodejs8
        CodeUri: './'
        Timeout: 60
 
       
#Funfile
RUNTIME nodejs8
RUN npm install couchbase         

执行 fun install 命令

$ fun install
using template: template.yml
start installing function dependencies without docker

building fc/helloworld
Funfile exist, Fun will use container to build forcely
Step 1/2 : FROM registry.cn-beijing.aliyuncs.com/aliyunfc/runtime-nodejs8:build-1.9.1
 ---> fff7345ce8a3
Step 2/2 : RUN npm install couchbase
 ---> Using cache
 ---> cdd1bba7c23e
sha256:cdd1bba7c23e162042da0df8c433674f1e7bfec8d49e133478dc06c9939bb891
Successfully built cdd1bba7c23e
Successfully tagged fun-cache-84cac7f3-5391-49a6-b108-b1ac7269ccf7:latest
copying function artifact to /Users/txd123/Desktop/nodejs

build function using image: fun-cache-84cac7f3-5391-49a6-b108-b1ac7269ccf7
running task flow NpmTaskFlow
running task: CopySource
running task: NpmInstall

Install Success


Tips for next step
======================
* Invoke Event Function: fun local invoke
* Invoke Http Function: fun local start
* Build Http Function: fun build
* Deploy Resources: fun deploy

发布上线

使用 fun deploy 发布上线,然后到控制台执行一下线上实际的运行效果:
image

总结

fun install 功能能够将代码和依赖文件分离开,独立安装系统依赖文件,而且 fun local 和 fun deply 都能够自动帮你设置第三方库的依赖引用路径,让您无需关心环境变量问题。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(2)
原文: 第三章——使用系统函数、存储过程和DBCC SQLPERF命令来监控SQLServer(2) 承接上文,本文讲述如何使用系统存储过程来监控系统。
798 0
如何使用VC6编译sqlite3源码生成动态链接库(版本:sqlite-source-3_6_23_1)
如何使用VC6编译sqlite-source-3_6_23_1 一.版本: 2010-Mar-30  Version3.6.23.1 二.源代码获取: 在官网的http://www.sqlite.
742 0
[Unity3d]Unity系统自带函数生命周期以及相互关系
Unity脚本从唤醒到销毁都有着一套比较完善的生命周期,添加任何脚本都要遵守生命周期法则! 接下来介绍几种系统自调用的重要方法。首先要我们先来说明一下它们的执行顺序: Awake --> Start --> Update --> FixedUpdate --> LateUpdate -->OnGUI -->Reset --> OnDisable -->OnDestroy 下面我们针对每一个方法进行详细的说明: 1.Awake:用于在游戏开始之前初始化变量或游戏状态。
1019 0
ylb:SQLServer常用系统函数-字符串函数、配置函数、系统统计函数
原文:ylb:SQLServer常用系统函数-字符串函数、配置函数、系统统计函数 ylbtech-SQL Server:SQL Server-SQLServer常用系统函数 -- =============================================-- ylb:SQLSe...
827 0
C++程序设计-第13周递归函数及银行系统程序设计上机实践项目
回到课程主页,链接:C++程序设计课程主页-2012级   本次上机对应的教学内容:第4章   递归函数、变量的作用域、存储类型 第一部分 练习+上机验证(不必提交上机报告)   阅读下列程序,写出程序的运行结果。上机时运行程序,与你的预期进行对照、理解。   提示:如果对运行结果不理解,请通过单步执行的手段跟踪理解。  1. 两个有递归函数的程序,要求按课堂演示,画出调用过程(1) #i
1137 0
PHPpraffa也有了,一个PHP版本的阿里云函数计算与API网关的开发框架
发布了Python版本的函数计算与API网关的开发框架后,一直觉得对不起PHP,因为公司一直是用PHP的,我这弄了个Python,实在不该,对了,(Python版本说明点这里。 PHPpraffa是什么? PHPpraffa 是praffa的PHP版本。
1141 0
+关注
16
文章
13
问答
来源圈子
更多
专注Serverless、微服务、函数计算等
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载