gpt4 book ai didi

ruby - AWS lambda : Ruby function failing to load gem

转载 作者:太空宇宙 更新时间:2023-11-03 16:40:44 26 4
gpt4 key购买 nike

我有一个依赖于外部(即非 AWS)RubyGem 的 Ruby Lambda 函数。我有一个 Gemfile、一个 Gemfile.lock 和一个 vendor/bundle 目录。从本地角度来看,一切看起来都很好。

我已经尝试使用 bundle install --path vendor/bundlebundle install --deployment 来安装 gems,我特别包括了 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'"
]
}

据推测,我在上传函数之前将 gems 捆绑在一起确实做错了一些事情;但我不知道是什么。有人有什么想法吗?

最佳答案

我遇到了同样的问题。根本原因是在本地和 Lambda 函数中使用了不同的 ruby​​ 版本。目前 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 函数当前使用的确切版本(即 2.5)相匹配。

关于ruby - AWS lambda : Ruby function failing to load gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53673486/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com