如何在ruby aws lambda函数中要求本地项目库



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

现在,使用lambda函数控制台编辑器,我在vendor/bundle中上传了带有库的zip文件。

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

捆绑包安装--路径供应商/捆绑包

从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进入我的脚本文件中,将我的gem放在vendor/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函数的名称。

最新更新