Pergunta

Eu escrevi um aplicativo Small Rails para servir conteúdo para outro site via XmlHttPrequests que estarão operando a partir de outro domínio (não será possível colocá -los em execução no mesmo servidor). Entendo que vou precisar definir o acesso a acesso ao arco-arelamento no meu servidor Rails para permitir que a página da Web solicitando acessar este material.

Parece bastante bem documentado como fazer isso com o Apache e este é provavelmente o servidor que usarei assim que implantar o site. Enquanto estou desenvolvendo, espero apenas usar o Webrick, pois estou acostumado a fazer com o Rails. Existe uma maneira de configurar o Webrick para fornecer o cabeçalho HTTP apropriado dentro dos trilhos?

Foi útil?

Solução

Se você estiver no Rails 2, basta adicionar isso ao seu aplicativo Contoller.

before_filter :set_access

def set_access
  @response.headers["Access-Control-Allow-Origin"] = "*"
end

Obviamente mudando "*" Para algo um pouco menos aberto seria uma boa ideia.

Outras dicas

Rails 4 (http://edgeguides.rubyonrails.org/security.html#default thelaveters)

Em Config/Application.rb:

config.action_dispatch.default_headers.merge!({
  'Access-Control-Allow-Origin' => '*',
  'Access-Control-Request-Method' => '*'
})

Rails 3.1

class ApplicationController < ActionController::Base
  protect_from_forgery
  after_filter :set_access_control_headers

  def set_access_control_headers
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Request-Method'] = '*'
  end
end

Rails 3.1 - Usando um controlador After_Filter não funcionou para mim, então adicionei um middleware personalizado:

No app/middleware/cors_middleware.rb:

# For icons to work in Firefox with CDN
class CorsMiddleware
  def initialize(app)
    @app = app
  end

  def call(env)
    status, headers, body = @app.call(env)
    cors_headers = headers.merge({
      'Access-Control-Allow-Origin' => '*',
      'Access-Control-Request-Method' => '*'        
    })
    [status, cors_headers, body]
  end  
end

Em Config/Application.rb:

require File.join(Rails.root, "app", "middleware", "cors_middleware")
config.middleware.insert_before ActionDispatch::Static, CorsMiddleware # Need it early in the chain to work for assets

Rails 2.3.8

before_filter :allow_cross_domain_access
def allow_cross_domain_access
  response.headers["Access-Control-Allow-Origin"] = "*"
  response.headers["Access-Control-Allow-Methods"] = "*"
end

Caso você queira a solução como uma gema de middleware de rack:https://github.com/cyu/rack-cors

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top