2014-06-21 2 views
2

Ember 시작 안내서를 따라 TodoMVC 앱을 빌드하지만 Rails를 백엔드로 사용하려고합니다. 불행히도 저는 크로스 사이트 도메인에 문제가 있습니다. 게시물 요청을 시도 할 때이 오류 메시지가 표시됩니다.레일 백엔드가있는 Ember TodoMVC 앱 없음 'Access-Control-Allow-Origin'헤더가 있습니다.

XMLHttpRequest cannot load http://localhost:3000/api/todos. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access. 

레일 측면에 랙 Cors가 설치되어 있습니다. 나는 내 Gemfile에 추가 한 :

module Todoemberrails 
    class Application < Rails::Application 
    config.assets.enabled = false 

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

을 그리고 이것은 내 컨트롤러 :

gem 'rack-cors', :require => 'rack/cors' 

그리고 내 application.rb 파일

내가 가진

class Api::TodosController < ApplicationController 
    def index 
    render json: Todo.all 
    end 

    def show 
    render json: Todo.find(params[:id]) 
    end 

    def create 
    todo = Todo.new(todo_params) 

    if todo.save 
     render json: todo, status: :created 
    else 
     render json: todo.errors, status: :unprocessed 
    end 
    end 

    private 

    def todo_params 
    params.require(:todo).permit(:title, :is_completed) 
    end 
end 

그리고 내 엠버 응용 프로그램의 내부 app/adapters/application.js 내가 가지고있는 것 :

import DS from 'ember-data'; 

export default DS.RESTAdapter.extend({ 
    host: 'http://localhost:3000/api' 
}); 
+0

localhost : 4200이 요청을 보내는 이유는 무엇입니까? 거기에서 앱을 실행하고 있습니까? 그렇다면 호스트를 호스트로 변경합니다 : 'localhost : 4200/api'help? – Jacquerie

+0

Ember-CLI를 사용하여 자체 웹 서버를 사용하여 ember 응용 프로그램을 호스팅하므로 레일스 서버를 동일한 포트에서 실행할 수 없기 때문에 localhost : 4200으로 변경할 수 없습니다. –

+0

해결책을 제공 할 수는 없지만 막히면 'DS.ActiveModelAdapter'를 살펴 보는 것이 좋습니다. 보석'active_model_serializers'와 결합하면 완벽하게 작동합니다. – AWM

답변

0

레일즈는 기본적으로 크로스 사이트 스크립팅을 막기 위해 이것을 허용하지 않습니다. 이 보드를 건너 허용하려면

, 당신은 당신의와 ApplicationController이를 추가 할 수 있습니다 : A는 아니지만 된 프로덕션 앱 엠버 가이드, 시작하기 위해

after_filter :cors_set_access_control_headers 

    def cors_set_access_control_headers 
    headers['Access-Control-Allow-Origin']  = '*' 
    headers['Access-Control-Allow-Methods']  = 'POST, GET, OPTIONS' 
    headers['Access-Control-Max-Age']   = '1728000' 
    headers['Access-Control-Allow-Credentials'] = 'true' 
    end 

괜찮 소리.