2012-08-09 101 views
1

我在App Store中有一個與Heroku上託管的RESTful Rails應用程序相交互的應用程序。我做了將API的基本URL硬編碼到myapp.heroku.com而不是使用頂級域的可怕錯誤。將Heroku子域請求重定向到另一個IP

我現在正在遷移到新服務器的過程中,所以我正在嘗試查看我的選項以使我的iPhone應用程序用戶無縫過渡。我想創建一個Rake應用程序,將來自該heroku子域的所有流量重定向到我的新服務器地址,但後來我讀到HTTP 1.1不允許POST重定向(我的API有幾個POST端點)。我總是可以將我的POST請求重定向爲GET請求,但那肯定不對。

有沒有其他的選擇,我可能會失蹤?有什麼方法Heroku接受將我的子域的A記錄更改爲指向我的新服務器IP?

回答

3

我最終按照約翰說的去做,並在我的應用程序中更改我的API端點。爲了讓應用程序工作的早期版本(有Heroku的子域在其中硬編碼),我結束了寫這個快速西納特拉應用程序,取代了我原來的Heroku應用程序使用它:

require 'sinatra' 
require 'mechanize' 

API_BASE_URL = "http://newdomain.com" 

get '/*' do |path| 
    url = URI("#{API_BASE_URL}/#{path}") 

    agent = Mechanize.new 
    agent.user_agent = request.user_agent 

    headers = {'AUTHORIZATION' => request.env['HTTP_AUTHORIZATION']} 

    page = agent.post(url, params, headers) 

    content_type :json 
    page.body 
end 


get '/*' do |path| 
    url = URI("#{API_BASE_URL}/#{path}") 

    agent = Mechanize.new 
    agent.user_agent = request.user_agent 

    headers = {'AUTHORIZATION' => request.env['HTTP_AUTHORIZATION']} 

    page = agent.get(url, params, nil, headers) 

    content_type :json 
    page.body 
end 

(此代碼很可能減少最多隻能使用一種方法)

+0

看來第一條路線應該是'/ *'do |路徑| 。 – 2013-08-09 13:13:45

1

他們不會爲你更新他們的DNS - * .heroku.com將是通配符DNS條目,每次添加站點時都不會添加新的子域名。

這似乎是最好的解決方案將是妥善解決它。將新域添加到Heroku上的現有應用程序中,它仍然可以在app.heroku.com和yourcustomdomain.com上訪問。

然後,更新您的iOS應用程序以使用新的customdomain作爲其端點。一旦它全部正常工作,請減少DNS條目上的TTL,然後在新服務器上重新指定它。

+0

除非所有用戶都更新到使用新API端點的最新版本的應用程序,否則可能需要幾個月/年。 – samvermette 2012-08-11 06:46:01

相關問題