ruby - 如何将本地项目库引入 ruby​​ aws lambda 函数?

标签 ruby amazon-web-services aws-lambda rubygems

我有一个 ruby​​ lambda 函数,现在它需要使用 mysql2 连接数据库。

现在,使用 lambda 函数控制台编辑器,我上传了 zip 文件,其中包含供应商/ bundle 中的库。

我使用以下命令在本地安装了库

bundle install --path vendor/bundle

从 Gemfile 安装 mysql2 ~> 0.5.2。

现在,我编写了下面的代码来从数据库获取数据

require 'json'
load_paths = Dir.pwd + "/vendor/bundle/ruby/2.5.0/gems/**/lib"
$LOAD_PATH.unshift(*load_paths)
require 'mysql2'
def lambda_handler()
  @db_host  = "host"
  @db_user  = "user"
  @db_pass  = "pass"
  @db_name = "db"

  client = Mysql2::Client.new(:host => @db_host, :username => @db_user, :password => @db_pass, :database => @db_name)
  @cdr_result = client.query("SELECT count(*) from names")
  puts @cdr_result
  { statusCode: 200, body: JSON.generate('Hello from Lambda!') }
end
lambda_handler

但在 aws lambda 中抛出此错误

Response:
{
  "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/replaceFile.rb:4: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'"
  ]
}

有什么方法可以要求本地目录 mysql2 gem 进入我的脚本文件,让我的 gems 位于供应商/ bundle 中,并在我的 ruby​​ 脚本中使用这些库,该脚本位于 aws lambda 部署包中。

最佳答案

显然其他答案不适用于 Ruby 2.7.0。

它对我有用

$LOAD_PATH.unshift *Dir['/var/task/app_name/vendor/ruby/2.7.0/gems/**/lib']

请务必将 app_name 更改为您的 lambda 函数的名称。

关于ruby - 如何将本地项目库引入 ruby​​ aws lambda 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53849966/

相关文章:

amazon-web-services - 如何从 cloudformation 模板在不同区域创建/部署 lambda 函数?

javascript - AngularJS 和 ui-router - templateUrl 不工作

ruby - 为什么以空格开头的字符串转换为 : ! ' 与 Ruby/YAML

ruby-on-rails - RSpec 测试失败,资源路由为 "No route matches"

ruby - Dropbox API - Dropbox ruby​​ gem (蒂姆·摩根) : How to authorize

amazon-web-services - Cognito 用户池 - 是否可以为 Facebook 登录创建自定义注册/登录表单?

python - 尝试在 lambda 中导入时没有名为 'requests_aws4auth' 的模块

node.js - 没有负载均衡器的 EC2 实例上的 AWS SSL - NodeJS

java - 从AWS s3文件读取N个字节没有读取N个字节

python - 在 AWS 中使用 Python 中的 Lambda 将文件写入 S3