如何要求本地项目库加入ruby aws lambda函数?

时间:2018-12-19 11:06:57

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

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

现在,使用lambda功能控制台编辑器,我将zip文件上传到了供应商/捆绑包中的库中。

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

  

捆绑安装--path供应商/捆绑

从Gemfile安装mysql2〜> 0.5.2。

现在,我编写了以下代码以从db获取数据

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放入我的脚本文件中,并将我的gem放置在vendor / bundle中,并在AWS Lambda部署包中的ruby脚本中使用这些库。

1 个答案:

答案 0 :(得分:0)

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

它对我有用

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

请确保将app_name更改为lambda函数的名称。