You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby 3.3 AWS Lambda无法向/tmp目录写入大文件问题求助

解决Ruby 3.3 AWS Lambda写入大文件到/tmp失败的问题

问题根源

Ruby 3.3对临时目录的安全性做了严格升级,tmpdir.rb会拒绝使用**全局可写(world-writable)**的目录作为临时存储。而AWS Lambda的/tmp目录默认权限是777,当文件大小超过阈值(约10-40KB)时,open-uri会尝试创建临时文件缓存内容,触发Ruby的安全检查,抛出could not find a temporary directory错误。

解决方案

在代码中手动创建一个权限合规的子目录,并指定Ruby使用该目录:

require "json"
require "open-uri"
require "tmpdir"

def lambda_handler(event:, context:)
  # 在/tmp下创建仅当前用户可访问的子目录(权限700)
  safe_tmp = File.join(Dir.tmpdir, "secure_temp")
  Dir.mkdir(safe_tmp, 0700) unless Dir.exist?(safe_tmp)

  # 让Ruby使用这个安全临时目录
  ENV['TMPDIR'] = safe_tmp

  # 处理大文件不再报错
  URI.open("远程大文件URL")
  URI.open("远程小文件URL")

  { statusCode: 200, body: JSON.generate('Hello from Lambda!') }
end

无效尝试的原因

直接设置ENV['TMPDIR']='/tmp'无法解决问题,因为/tmp本身是全局可写权限,依然会被Ruby的安全机制拦截。必须使用权限为700的目录,确保只有当前Lambda进程能访问。

注意事项

  • Lambda的临时存储(Ephemeral storage)设置无需调整(512MB完全满足需求)
  • 该问题是Ruby 3.3的安全特性导致,与AWS环境变更无关

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:36:02