草庐IT

node.js - AWS serverless-image-handler v3.x 因 AWS Lambda 执行环境的更改而中断

coder 2023-05-30 原文

我们使用的是 AWS serverless image handler 的 v3 版本用于我们网站的图像处理。然而,当 AWS released this update ,整个事情都被打破了。遗憾的是,新版本 (v4) 不适用于 Thumbor 样式请求,原因如下:

如何在新版本的 AWS serverless-image-handler 上启动并运行,而无需对我的应用程序进行重大更改(即我想继续使用 Thumbor 样式请求,但使用 v4无服务器图像处理程序)?

最佳答案

我注意到很多其他人也遇到了同样的问题,所以我希望这些笔记能帮助人们解决他们的问题。

在此堆栈的新 v4 上对 lambda 图像处理函数进行了一定量的工作后,我现在可以令人满意地处理 Thumbor 样式请求,并且我不需要更改我的应用程序请求图像的方式。

请注意,这里的一些修复是有限的,因为我们只使用了 Thumbor 功能的一个子集,所以我们只修复了我们需要的部分。您可能正在使用我们没有使用的选项,这些选项可能还需要额外或不同的编码才能开始工作。

部署 AWS serverless-image-handler 堆栈的 v4 后,您唯一需要更改的是由云形成创建的堆栈的 Lambda“ImageHandlerFunction”。以下是对此进行更新的一些快速提示:

  • 在 Lambda 中找到 ImageHandlerFunction,进入并点击 Actions --> Export function --> Download deployment package

  • 这将下载一个 zip 文件,其中包含图像处理程序的所有代码。从此 zip 中提取所有文件。

  • 您现在可以开始更改代码了。如果需要,您可以使用 mocha 运行单元测试。

  • 对代码进行更改后,您需要创建一个包含所有文件的新 zip

  • 你需要先把你的新部署包上传到S3,才能更新ImageHandlerFunction(直接上传太大了)

  • 上传到 S3 上的某个位置后,转到 lambda 中的 ImageHandlerFunction 并从代码条目类型中选择 s3 选项。在 S3 上输入 zip 文件的链接,然后单击页面顶部的保存。

  • 您现在可以测试更新后的功能。请记住,响应缓存在云端,因此您可能需要在云端创建和失效以对其进行测试,或者使用尚未缓存的新图像。

关于解决上述问题:

要让它处理子文件夹中的图像,而不仅仅是 S3 存储桶的根: 见 my fix here - 基本上你需要改变这个:

    const key = (event["path"]).split("/");
    return key[key.length - 1];

我使用的包括单元测试的解决方案在上面的 github 评论中。您可能需要稍微不同的解决方案。

让安全哈希工作see my fix here

让自动 webp 支持工作see my fix here

关于修复 Thumbor 和 json 图像请求之间的映射,这需要一些小改动,但并不是什么大问题。最好只是根据您自己的要求来执行此操作,因为我的修复非常适合我的使用。我会尝试在相关的github票上添加一些注释。

关于node.js - AWS serverless-image-handler v3.x 因 AWS Lambda 执行环境的更改而中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57178748/

有关node.js - AWS serverless-image-handler v3.x 因 AWS Lambda 执行环境的更改而中断的更多相关文章

  1. ruby - ruby 乘法语句中星号中断语法前的空格 - 2

    在添加一些空格以使代码更具可读性时(与上面的代码对齐),我遇到了这个:classCdefx42endendm=C.new现在这将给出“错误数量的参数”:m.x*m.x这将给出“语法错误,意外的tSTAR,期待$end”:2/m.x*m.x这里的解析器到底发生了什么?我使用Ruby1.9.2和2.1.5进行了测试。 最佳答案 *用于运算符(42*42)和参数解包(myfun*[42,42])。当你这样做时:m.x*m.x2/m.x*m.xRuby将此解释为参数解包,而不是*运算符(即乘法)。如果您不熟悉它,参数解包(有时也称为“spl

  2. ruby - 在 ASP 页面上 Mechanize 中断 - 2

    require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie

  3. ruby - 可以正常中断的来自 Rake 的长时间运行的 shell 命令? - 2

    在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa

  4. ruby-on-rails - prawnto 显示新页面时不会中断的表格 - 2

    我有可变数量的表格和可变数量的行,我想让它们一个接一个地显示,但如果表格不适合当前页面,请将其放在下一页,然后继续。我已将表格放入事务中,以便我可以回滚然后打印它(如果高度适合当前页面),但我如何获得表格高度?我现在有这段代码pdf.transactiondopdf.table@data,:font_size=>12,:border_style=>:grid,:horizontal_padding=>10,:vertical_padding=>3,:border_width=>2,:position=>:left,:row_colors=>["FFFFFF","DDDDDD"]pdf.

  5. ruby-on-rails - Rails - Carrierwave 进程抛出 ArgumentError : no images in this image list - 2

    在尝试实现应用auto_orient的过程之后!对于我的图片,我收到此错误:ArgumentError(noimagesinthisimagelist):app/uploaders/image_uploader.rb:36:in`fix_exif_rotation'app/controllers/posts_controller.rb:12:in`create'Carrierwave在没有进程的情况下工作正常,但在添加进程后尝试上传图像时抛出错误。流程如下:process:fix_exif_rotationdeffix_exif_rotationmanipulate!do|image|

  6. ruby-on-rails - Assets 管道损坏 : Not compiling on the fly css and js files - 2

    我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1

  7. ruby-on-rails - Rails - 理解 application.js 和 application.css - 2

    rails新手。只是想了解\assests目录中的这两个文件。例如,application.js文件有如下行://=requirejquery//=requirejquery_ujs//=require_tree.我理解require_tree。只是将所有JS文件添加到当前目录中。根据上下文,我可以看出requirejquery添加了jQuery库。但是它从哪里得到这些jQuery库呢?我没有在我的Assets文件夹中看到任何jquery.js文件——或者直接在我的整个应用程序中没有看到任何jquery.js文件?同样,我正在按照一些说明安装TwitterBootstrap(http:

  8. node.js - 如何在 Travis CI 上的一个项目中运行 Node.js 和 Ruby 测试 - 2

    我有一个包含多个组件的存储库,其中大部分是用JavaScript(Node.js)编写的,一个是用Ruby(RubyonRails)编写的。我想要一个.travis.yml文件来触发一个运行每个组件的所有测试的构建。根据thisTravisCIGoogleGroupthread,目前还没有官方支持。我的目录结构是这样的:.├──构建服务器├──核心├──扩展├──网络应用├──流浪文件├──package.json├──.travis.yml└──生成文件我希望能够运行特定版本的Ruby(2.2.2)和Node.js(0.12.2)。我已经有了一个make目标,所以maketest在每

  9. ruby-on-rails - ruby open ssl api for encrypted key (without nodes option) - 2

    在安装了openssllib的linux机器上,当您执行带有“-nodes”选项的“opensslpkcs12”时,您将获得带有未加密私钥的输出,但如果您跳过–nodes选项,则输出将具有加密的私钥。e.g.opensslpkcs12-intest.pfx-outtest.pem你应该看到像下面这样加密的私钥-----BEGINENCRYPTEDPRIVATEKEY-----MIIFDjBABgkqhkiGG7s=-----ENDENCRYPTEDPRIVATEKEY-----如何使用ruby​​的开放ssl库实现上述目标?这就是我用ruby​​生成私钥的方式:@private_key

  10. node.js - 从未编写过任何自动化测试,我应该如何开始行为驱动开发? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。多年来,我一直在使用多种语言进行编程,并且认为自己总体上相当擅长。但是,我从未编写过任何自动化测试:没有单元测试,没有TDD,没有BDD,什么都没有。我已经尝试开始为我的项目编写适当的测试套件。我可以看到在进行任何更改后能够自动测试项目中所有代码的理论值(value)。我可以看到像RSpec和Mocha这样的测试框架应该如何使设置和运行所述测试变得相当容易

随机推荐