ruby-on-rails - 使用 Grape API 和 Heroku 的 CORS 问题

标签 ruby-on-rails api heroku cors

我有一个只读 API,它可以通过 Vagrant 设置在本地正常工作。在我的 Heroku 应用程序上,每个 API 请求都会因 CORS 错误而被拒绝:“请求的资源上不存在“Access-Control-Allow-Origin” header 。因此不允许访问 Origin“null”。”

在我的 API 基类中,我使用以下内容来设置 header :

module API
  class Base < Grape::API
    before do
      headers['Access-Control-Allow-Origin'] = '*'
      headers['Access-Control-Allow-Methods'] = 'GET, OPTIONS'
      headers['Access-Control-Request-Method'] = '*'
      headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization'
    end

    mount API::V1::Base   
  end
end

我怀疑这个before调用没有被触发——如果我在其中使用puts语句,该语句不会与其余输出一起出现在我的控制台中。

我很茫然。希望有人有这方面的经验。谢谢。

编辑:我也关注了Grape's CORS instructions但得到相同的结果。

成功。我使用了 rack-cors gem 和以下内容:

#application.rb
config.middleware.use Rack::Cors do
  allow do
    origins '*'

    # location of your API
    resource '/api/*', :headers => :any, :methods => [:get, :post, :options, :put]
  end
end

最佳答案

每次发出请求时,您都会收到 Access-Control-Allow-Origin 错误。

这可能是因为您的服务器 API 未响应带有 CORS 所需 header 的 OPTIONS 请求。

如果您使用的是 Google Chrome,可以在开发控制台 -> 网络选项卡中查看。

有趣的是,一些 Javascript 框架在向服务器发送正常请求之前确实会发出 OPTIONS 请求。

解决方案:

  1. 修改您的 Gemfile 以包含'rack-cors'
  2. 运行捆绑安装
  3. 修改您的 config.ru:

*如果启动 Rails 服务器时出错,请在“运行”后检查您的 API 命名空间

require 'rack/cors'

use Rack::Cors do
  allow do
    origins '*'
    resource '*', headers: :any, methods: [:get, :post, :options, :put]
  end
end

run API::V1::Base

现在您应该看到 Grape 处理带有 CORS header 的所有 OPTIONS 请求。

关于ruby-on-rails - 使用 Grape API 和 Heroku 的 CORS 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26998151/

相关文章:

python - 将静态 Assets 从本地机器部署到 heroku - 无法打开文件 'manage.py' : [Errno 2] No such file or directory

ruby-on-rails - Rails - 缓存表单的无效真实性 token 错误

ruby-on-rails - 如何从模型调用 rails 中的 logged_in 方法?

javascript - 在angularjs中使用restful api发出get请求

java - 我可以使用多个 try catch block 来抛出多个错误或异常吗

ruby-on-rails - psql : FATAL: sorry, 客户端已经太多了,HEROKU

ruby-on-rails - 旧的 Sidekiq 作业永远重试。在 Sidekiq UI 上看不到

ruby-on-rails - 使用 Rails 提高性能以加载 3000 条记录?

ruby-on-rails - ActiveAdmin 在从部分加载的同一自定义表单中编辑多个模型

javascript - 即使在 React 中正确导入后也不包含默认导出