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实例,简化成这样:
这样代码更简洁,还能避免手动传参的错误,SDK会自动从环境变量、本地凭证文件等按优先级顺序加载凭证。Aws.config.update({ region: 'us-east-2' }) - 确认Heroku环境变量已设置:在部署前,一定要确认Heroku上已经正确配置了这两个环境变量,你可以用命令检查:
如果没设置,用下面的命令添加:heroku config:get AWS_ACCESS_KEY_ID heroku config:get AWS_SECRET_ACCESS_KEYheroku config:set AWS_ACCESS_KEY_ID=你的密钥ID AWS_SECRET_ACCESS_KEY=你的密钥 - 本地先测试:建议先在本地开发环境跑通导入任务,确保凭证能正常连接AWS获取CSV,再部署到Heroku,这样能排除本地配置的问题。
内容的提问来源于stack exchange,提问作者frankburke333
相关产品推荐
相关产品推荐

