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

Rails中使用HTTParty gem遇TCP连接拒绝错误的解决求助

解决Rails调用Food2Fork API时的Errno::ECONNREFUSED错误

先看你给出的代码,问题其实出在HTTParty的base_uri用法错误上!你在Recipe模型里写了base_uri = "https://doesntmatter.com/api",这只是给一个局部变量赋值,根本没有调用HTTParty提供的base_uri方法来设置API的基础地址。这就导致HTTParty不知道该往哪个主机发请求,自然就会出现“连接到nil主机的80端口被拒绝”的错误——因为它连目标地址都找不到。

下面是具体的解决步骤和修正后的代码:

1. 修正base_uri的用法

把赋值语句改成调用HTTParty的base_uri方法,同时结合你定义的环境变量来设置正确的API地址:

class Recipe
  include HTTParty
  default_options.update(verify: false) # Turn off SSL verification

  # 正确调用base_uri方法,而不是赋值变量
  base_uri ENV['FOOD2FORK_SERVER_AND_PORT'] || 'https://food2fork.com/api'
  default_params key: ENV['FOOD2FORK_KEY'], q: "search"
  format :json

  def self.for(term)
    get("/search", query: { query: term })["recipes"]
  end
end

2. 验证环境变量是否正确加载

确保ENV['FOOD2FORK_KEY']和ENV['FOOD2FORK_SERVER_AND_PORT']确实被Rails读取到了:

  • 打开Rails控制台(rails c),直接输入puts ENV['FOOD2FORK_KEY'],看看是否输出你的API密钥。
  • 如果用了dotenv这类管理环境变量的gem,检查项目根目录的.env文件是否存在,变量名有没有拼写错误(比如是不是写成了FOOD2FORK_KEY而不是其他变体)。

3. 排查网络和API可用性

  • 先手动测试API是否能访问:用Postman或者curl直接调用Food2Fork的搜索接口,比如curl "https://food2fork.com/api/search?key=你的密钥&q=chocolate",看能不能返回正常的JSON数据。
  • 检查Windows的代理设置:有时候即使关闭了防火墙,系统的全局代理也会影响请求,暂时关闭代理再试试。
  • 测试端口连通性:在命令行里运行telnet food2fork.com 443,如果能连通说明HTTPS端口是开放的;如果不行,可能是网络运营商的限制,或者Food2Fork的API有变更(比如域名或端口调整)。

4. 额外注意事项

  • 确认Food2Fork API的当前状态:有些API可能会停止服务或者更新接口地址,去官方文档确认一下最新的调用方式。
  • SSL证书问题:虽然你设置了verify: false关闭了SSL验证,但如果API要求必须验证证书,可能会有其他问题,不过当前的错误主要是地址问题,先解决这个再说。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:29:37