2013-08-30 86 views
20

我想在我的導軌應用程序中實現CORS,所以我使用Google搜索rack-cors gem。而我所做的一切都是在自述中說,有相應的更新Gemfile中和更新的application.rb這樣的:
無法使用導軌應用程序中的機架工作

module YourApp 
    class Application < Rails::Application 

    # ... 

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

    end 
end 

但沒有奏效。無論我做什麼,在瀏覽器控制檯我一直得到消息:
XMLHttpRequest cannot load https://somewebsite.com. Origin http://0.0.0.0:3000 is not allowed by Access-Control-Allow-Origin.

在github上閱讀本blogpostissue後,我意識到,在中間件堆棧問題也許機架CORS中間件的位置。所以,我沒有因爲被告知在GitHub的問題:

module YourApp 
    class Application < Rails::Application 

    # ... 

    config.middleware.insert 0, Rack::Cors do 
     allow do 
     origins '*' 
     resource '*', :headers => :any, :methods => [:get, :post, :options] 
     end 
    end 

    end 
end 

之後,當我運行rake middleware架-CORS是真正在堆棧的頂部。
但它仍然只是不會工作。我不斷收到相同的錯誤。任何人,請幫助。

+0

我知道這是顯而易見的,但是你一定要重新啓動服務器的軌道?由於這是初始化的一部分,所以直到重新啓動纔會生效。 – clexmond

+0

是的,我重新啓動服務器很多次。 – Prostakov

+0

問題是,它不是什麼超自然的東西,只是爲了獲得這個寶石的工作。只是讓我瘋了... – Prostakov

回答

15

我遇到了與heroku相同的問題。我發現this blog與機架問題相同。

剛移動use Rack::Corsconfig.ru,重新部署到heroku,它的工作原理。

require ::File.expand_path('../config/environment', __FILE__) 
run Rails.application 

require 'rack/cors' 
use Rack::Cors do 

    # allow all origins in development 
    allow do 
    origins '*' 
    resource '*', 
     :headers => :any, 
     :methods => [:get, :post, :delete, :put, :options] 
    end 
end 
+0

仍然沒有工作..在開發.. – larryzhao

+1

** ** **工作。截至2014年7月7日,這是唯一的方式**使其工作(或者你可以花費2/3小時登陸谷歌的每一個解決方案...)。 thx – Ben

+0

確保你有這個'require'rack/cors'' –

0

畢竟它出來,這個寶石與heroku有一些問題,在本地機器上它工作得很好。

+3

您能提供任何進一步的闡述或鏈接嗎?你找到解決辦法了嗎? – Jason

10

有一個新的issue線程Heroku的解決方案

而不是使用

config.middleware.use Rack::Cors do 

嘗試

config.middleware.insert_before ActionDispatch::Static, Rack::Cors do 

爲我工作。

+0

這似乎是一個Rails版本的東西。我發現我不得不在上面的Rails 3.2和Rails 4.1中的第二個代碼片段中使用第一個代碼片段。 –

+0

都爲我工作,導軌4.1。這個線程是無價的,相比,在網絡上可以找到關於這個主題的廢話噸 – Ben

1

我不得不創建一個特殊的路徑來處理選項請求,cors gem沒有爲我這樣做,就像我預期的那樣。我加入到routes.rb中結束的路線是:

match "*path", :to => proc {|env| [200, { 
    'Access-Control-Allow-Origin' => '*', 
    'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE, OPTIONS', 
    'Access-Control-Allow-Credentials' => 'true', 
    'Access-Control-Request-Method' => '*', 
    'Access-Control-Allow-Headers' => 'Origin, X-Requested-With, Content-Type, Accept, Authorization', 
'Content-Type' => 'text/plain' 

}, ["CORS Preflight"]] }, :via => [:options] 
0

確保您添加或取消註釋gem 'rack-cors'在Gemfile中

相關問題