我在本地运行AWS Lambda。
当我运行lambda函数时,这是我得到的错误:
{
"errorMessage": "cannot load such file -- nokogiri/nokogiri",
"errorType": "Init<LoadError>",
"stackTrace": [
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'",
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'",
"/var/task/vendor/ruby/2.7.0/gems/nokogiri-1.11.0.rc2/lib/nokogiri.rb:15:in `rescue in <top (required)>'",
"/var/task/vendor/ruby/2.7.0/gems/nokogiri-1.11.0.rc2/lib/nokogiri.rb:11:in `<top (required)>'",
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'",
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'",
"/var/task/vendor/ruby/2.7.0/gems/google_drive-3.0.5/lib/google_drive/session.rb:8:in `<top (required)>'",
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'",
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'",
"/var/task/vendor/ruby/2.7.0/gems/google_drive-3.0.5/lib/google_drive.rb:7:in `<top (required)>'",
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'",
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'",
"/var/task/main.rb:7:in `<top (required)>'",
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'",
"/var/lang/lib/ruby/site_ruby/2.7.0/rubygems/core_ext/kernel_require.rb:92:in `require'"
]
}我查看了/var/task/vendor/ruby/2.7.0/gems/nokogiri-1.11.0.rc2/lib/nokogiri.rb:15,这是让一切都爆炸的代码:‘`require 'nokogiri/nokogiri’
这些是`./vendor/ruby/2.7.0/gems/nokogiri-1.11.0.rc2/lib':中的文件
nokogiri
nokogiri.rb
xsd这些是./vendor/ruby/2.7.0/gems/nokogiri-1.11.0.rc2/lib/nokogiri/中的文件
css
decorators
html.rb
nokogiri.bundle
version.rb
xml.rb
xslt.rb
css.rb
html
jruby
syntax_error.rb
xml
xslt没有文件nokogiri/nokogiri,因此我认为是错误。我尝试将nokogiri.rb复制到nokogiri目录中,但没有弹出其他错误。
我该如何继续前进呢?
谢谢!
发布于 2021-11-25 06:07:51
在我读到这篇文章https://www.stevenringo.com/ruby-in-aws-lambda-with-postgresql-nokogiri/之前,我一直面临着同样的问题。
总而言之,问题是当使用AWS Lambda时,没有办法在环境/Lambda上执行命令。因此,虽然您可以在本地使用bundle install,但您不能在Lambda上使用它。话虽如此,正如文章提到的那样,we need to find a way to package and compile dependencies ahead of time in an environment that is compatible with the Lambda environment.
这使我们找到了另一种解决方案,即从docker容器编译依赖项以匹配lambda环境。为了解决这个问题,您需要执行以下操作:
Dockerfile,下面几行代码:来自lambci/lambda:build-ruby2.7cmd "/bin/bash"
docker build -t lambda-ruby2.7 . (不要忘记末尾的句号!)使用以下命令进入容器内的
docker run --rm -it -v $PWD:/var/task -w /var/task lambda-ruby2.7从外壳/容器运行bundle install --path vendor/bundle --clean
在项目中,将其压缩:zip -q -r deploy.zip .
这个解决方案对我很有效。希望它能成为另一种选择,直到有人想出如何在不使用Docker的情况下做到这一点。
https://stackoverflow.com/questions/63467909
复制相似问题