Ruby+HTTParty发起PUT请求报错:指定资源不存在求助
问题排查与修复方案
我帮你梳理下代码里的核心问题,正是这些错误导致了请求返回“资源不存在”的报错:
1. URL字符串插值失败
你定义base_url时用了单引号,但Ruby中只有双引号才会解析#{}形式的变量插值。这就导致你的请求URL实际上是http://#{host}/api/v1/...,而不是替换成config里的真实host地址——请求到一个不存在的地址,自然会返回资源不存在的错误。
修正方式:把单引号改成双引号,让变量正常插值:
base_url = "http://#{host}/api/v1/users/self/custom_data/program_of_study"
2. Authorization头的变量名错误
你在header里用了全局变量$access_token,但前面定义的变量是access_token(没有$前缀)。这会导致Authorization头里的Bearer token是空的或者错误的,进一步影响请求的合法性。
修正方式:把$access_token改成access_token:
header = { 'Authorization': "Bearer #{access_token}", "Content-Type" => 'application/json', 'Accept' => 'application/json' }
额外验证建议
修正后可以先打印base_url和header的值,确认:
base_url是否正确拼接了host地址Authorization头是否包含了有效的access token
这样应该就能解决你遇到的问题了。
内容的提问来源于stack exchange,提问作者Bob K




