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

Rails AWS配置文件错误:Heroku导入CSV时参数错误求助

解决 Aws::Credentials.new 传参错误的问题

嘿,这个错误我之前也碰到过!ArgumentError: wrong number of arguments (given 1, expected 2..3)的根源是你给Aws::Credentials.new传了关键字参数,但这个方法实际上只接受位置参数(最多再加一个可选的session token参数)。

问题代码分析

你现在的初始化代码是这样的:

Aws::Credentials.new(access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'])

这里你用了access_key_id:和secret_access_key:作为键名,相当于只传了一个哈希参数给方法,而它需要的是2-3个独立的位置参数,所以才会报参数数量不对的错误。

修正后的正确代码

把代码改成直接传入两个位置参数就行:

Aws.config.update({ 
  region: 'us-east-2', 
  credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY']) 
})

额外的优化小技巧

  • 让SDK自动加载凭证:其实AWS SDK for Ruby会自动读取环境变量里的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,你完全可以不用手动创建Aws::Credentials实例,简化成这样:
    Aws.config.update({ region: 'us-east-2' })
    
    这样代码更简洁,还能避免手动传参的错误,SDK会自动从环境变量、本地凭证文件等按优先级顺序加载凭证。
  • 确认Heroku环境变量已设置:在部署前,一定要确认Heroku上已经正确配置了这两个环境变量,你可以用命令检查:
    heroku config:get AWS_ACCESS_KEY_ID
    heroku config:get AWS_SECRET_ACCESS_KEY
    
    如果没设置,用下面的命令添加:
    heroku config:set AWS_ACCESS_KEY_ID=你的密钥ID AWS_SECRET_ACCESS_KEY=你的密钥
    
  • 本地先测试:建议先在本地开发环境跑通导入任务,确保凭证能正常连接AWS获取CSV,再部署到Heroku,这样能排除本地配置的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:06:01