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

Ruby on Rails部署Heroku API遇跨域错误:无Access-Control-Allow-Origin头

解决Heroku部署的Rails API跨域访问问题

嘿,我之前开发Rails应用调用Heroku上的API时也碰到过一模一样的问题!这个错误其实是浏览器的同源策略在搞鬼——你的前端跑在http://localhost:3000,而API在Heroku的域名下,两个域名不一样,浏览器就会拦截请求,除非API返回Access-Control-Allow-Origin响应头允许你的前端域名访问。另外错误里还提到“请求的资源不存在”,之后也别忘了检查下API的路由是不是写错了,先把CORS问题解决了再说。

下面是具体的解决步骤:

1. 添加rack-cors gem

Rails官方推荐用rack-cors中间件来处理跨域请求,先把它加到你的Gemfile里:

# Gemfile
gem 'rack-cors'

然后在本地终端运行:

bundle install

如果是部署到Heroku,push代码后Heroku会自动执行bundle install,不用额外操作,但本地先装好方便测试。

2. 配置CORS规则

在config/initializers目录下创建一个cors.rb文件(如果没有的话),然后添加以下配置代码:

# config/initializers/cors.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    # 这里填允许访问API的前端域名,开发环境填localhost:3000,生产环境换成你的实际前端域名
    origins 'http://localhost:3000', 'https://your-production-frontend.com'
    
    # 允许所有路径的请求,你也可以指定特定路径比如'/api/*'
    resource '*',
      headers: :any, # 允许所有请求头
      methods: [:get, :post, :put, :patch, :delete, :options, :head] # 允许所有常用HTTP方法
  end
end

⚠️ 注意:生产环境别用*作为origins(除非你的API是完全公开的),否则会有安全风险,一定要指定具体的前端域名。

3. 重启服务并部署到Heroku

  • 本地开发的话,重启你的Rails服务器,测试下请求能不能正常发送。
  • 确认没问题后,把代码提交并部署到Heroku:
git add .
git commit -m "Fix CORS issue by adding rack-cors configuration"
git push heroku main

(如果你的主分支不是main,换成对应的分支名就行)

额外检查点

  • 如果还是报错,去Heroku查看日志确认中间件是否加载成功:
heroku logs --tail
  • 别忘了检查API的路由是否正确,错误里提到“请求的资源不存在”,可能是你调用API的URL拼写错误,或者HTTP方法不匹配(比如前端用POST,但API只定义了GET路由)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:42:34