首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在上加载文件mysql2

问无法在上加载文件mysql2
EN

Stack Overflow用户
提问于 2018-12-19 15:34:40
回答 3查看 1.9K关注 0票数 3

尝试让Lambda连接到RDS数据库,但无法加载mysql2 gem。尝试了原始的指令,但这并没有解决问题。

我在供应商目录中找到了构建的mysql2创业板。这是使用包安装-部署完成的。

据推测,这是一个问题,因为mysql2使用了编译后的扩展。不过,我不知道如何才能为AWS Lambda分类。有什么想法?

下面是日志输出:

代码语言:javascript
复制
START RequestId: 62f35c49-039f-11e9-be04-1fd1111df42b Version: $LATEST
Ignoring mysql2-0.5.2 because its extensions are not built. Try: gem pristine mysql2 --version 0.5.2
Init error when loading handler lambda_function.lambda_handler
{
  "errorMessage": "cannot load such file -- mysql2",
  "errorType": "Init<LoadError>",
  "stackTrace": [
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
    "/var/task/lambda_function.rb:3:in `<top (required)>'",
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'"
  ]
}
END RequestId: 62f35c49-039f-11e9-be04-1fd1111df42b
REPORT RequestId: 62f35c49-039f-11e9-be04-1fd1111df42b  Duration: 1439.17 ms    Billed Duration: 1500 ms    Memory Size: 128 MB Max Memory Used: 17 MB  
Unknown application error occurred
Init<LoadError>

这是我的个人档案:

代码语言:javascript
复制
source 'https://rubygems.org'

gem 'mysql2', '~> 0.5.2'
gem 'sequel', '~> 5.15.0'

Gemfile.lock

代码语言:javascript
复制
GEM
remote: https://rubygems.org/
specs:
  mysql2 (0.5.2)
  sequel (5.15.0)

PLATFORMS
  ruby

DEPENDENCIES
  mysql2 (~> 0.5.2)
  sequel (~> 5.15.0)

BUNDLED WITH
  1.17.2

这里是我的lambda_function.rb文件的顶部

代码语言:javascript
复制
require 'json'
require 'logger'
require 'mysql2'
require 'sequel'
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-13 16:14:37

校长:*码头工人

创建一个像这样的停靠文件

代码语言:javascript
复制
    FROM lambci/lambda:build-ruby2.5
    RUN yum -y install mysql-devel
    RUN gem update bundler
    CMD "/bin/bash"

建造码头

代码语言:javascript
复制
    docker build -t lambda-ruby2.5-mysqldep .

使用以下命令在源代码文件夹中运行Docker

代码语言:javascript
复制
    docker run --rm -it -v $PWD:/var/task -w /var/task lambda-ruby2.5-mysqldep

它会把你带到巴什里面

  • 将mysql文件夹从/usr/lib64 64/mysql移动到/usr/mysql
  • mkdir -p /var/task/lib
  • cp -a /usr/mysql/..so。/var/task/lib/
  • 包配置--本地--with-mysql-config=/usr/local/mysql/bin/mysql_config build.mysql
  • 捆绑安装与部署和不部署

那就退出巴什。并创建一个lambda部署包并将其上传到AWS。对我来说很管用

票数 0
EN

Stack Overflow用户

发布于 2019-02-21 13:05:02

Dhanabal的回答是可行的,但让我更详细地阐述,因为对我来说,这个答案过于程序化。

基本上,带有本机扩展的创业板应该构建在与AWS相同的环境上。

因此,我们需要在模拟Lambda环境的lambci/lambda:build-ruby2.5坞映像中构建本机扩展。

另外,我们需要将动态库复制到加载路径中。

首先,让我们找出我们可以把图书馆放在哪里。

echo $LD_LIBRARY_PATH在容器中,您将得到/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib。

因此,我只需将库从/usr/lib64/mysql复制到[function dir]/lib并进行部署。

就这样。

票数 2
EN

Stack Overflow用户

发布于 2019-06-10 16:48:21

关于Dhanabal的回答

1) cp -a /usr/mysql/..so步骤缺少一个* 2)确保lib目录中没有sym链接,您需要实际的文件,因为符号链接在压缩后中断。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53854487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档