我有一个Ruby Lambda函数,该函数取决于外部(即非AWS)的RubyGem。我有一个Gemfile
,一个Gemfile.lock
和一个vendor/bundle
目录。从本地角度看一切都很好。
我尝试使用bundle install --path vendor/bundle
和bundle install --deployment
安装gem,并且在压缩文件时特别包含了vendor
目录:zip -r function.zip myfunction.rb vendor
尽管如此,当我在Lambda控制台中测试该功能时,它会失败,并显示错误消息,例如无法找到库。
{
"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/hello_ruby_record.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'"
]
}
大概是我在上传函数之前捆绑宝石时确实做错了什么;但我不知道是什么。有人有什么想法吗?
答案 0 :(得分:1)
我遇到了同样的问题。根本原因是在本地和Lambda函数中使用的红宝石版本不同。当前,AWS Lambda使用的是Ruby 2.5,而您的gem位于“ / vendor / bundle / ruby /”。因此,您的lambda函数无法找到您上传的gem库。要用您的Ruby版本覆盖gem路径,请在包含处理函数的文件顶部添加以下提到的代码:
my_gem_path = Dir["./vendor/bundle/ruby/<your-ruby-version>/gems/**/lib"]
$LOAD_PATH.unshift(*my_gem_path)
或者,只需尝试升级本地Ruby版本并将其与Lambda函数viz 2.5当前使用的确切版本匹配。