首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法加载这样的文件-- 'nokogiri\nokogiri‘ruby 2.7

无法加载这样的文件-- 'nokogiri\nokogiri‘ruby 2.7
EN

Stack Overflow用户
提问于 2020-08-18 19:43:43
回答 1查看 298关注 0票数 3

我在本地运行AWS Lambda。

当我运行lambda函数时,这是我得到的错误:

代码语言:javascript
复制
 {
  "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':中的文件

代码语言:javascript
复制
nokogiri
nokogiri.rb
xsd

这些是./vendor/ruby/2.7.0/gems/nokogiri-1.11.0.rc2/lib/nokogiri/中的文件

代码语言:javascript
复制
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目录中,但没有弹出其他错误。

我该如何继续前进呢?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 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环境。为了解决这个问题,您需要执行以下操作:

  1. 在本地计算机上安装docker

  1. 在你的ruby项目中创建一个Dockerfile,下面几行代码:

来自lambci/lambda:build-ruby2.7cmd "/bin/bash"

  1. 使用以下命令构建您的停靠器镜像:docker build -t lambda-ruby2.7 . (不要忘记末尾的句号!)

使用以下命令进入容器内的

  1. docker run --rm -it -v $PWD:/var/task -w /var/task lambda-ruby2.7

从外壳/容器运行bundle install --path vendor/bundle --clean

  1. 退出shell

在项目中,将其压缩:zip -q -r deploy.zip .

这个解决方案对我很有效。希望它能成为另一种选择,直到有人想出如何在不使用Docker的情况下做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63467909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档