我在App Store中有一个应用程序与Heroku上托管的RESTful Rails应用程序相互作用。我犯了一个可怕的错误,即将API的基本网址硬编码到myapp.heroku.com,而不是使用顶级域名。
我现在正在迁移到新服务器,因此我正在尝试查看我的选项,以便无缝转换到我的iPhone应用程序用户。我想创建一个Rake应用程序,将所有流量从heroku子域重定向到我的新服务器地址,但后来我读到HTTP 1.1不允许POST重定向(我的API有几个POST端点)。我总是可以将我的POST请求重定向为GET,但这肯定是不对的。
我可能还有其他选择吗? Heroku是否会接受将我的子域的A记录更改为指向我的新服务器IP?
答案 0 :(得分:3)
我最终按照约翰的说法做了,并在我的应用程序中更改了我的API端点。为了保持以前版本的应用程序正常工作(其中heroku子域已经硬编码),我最终编写了这个快速的Sinatra应用程序并用它取代了原来的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
(此代码可能缩减为单一方法)
答案 1 :(得分:1)
他们不会为您更新他们的DNS - * .heroku.com将是一个通配符DNS条目,他们不会在每次添加网站时添加新的子域名。
似乎最好的解决方案是正确修复它。将新域附加到Heroku上的现有应用程序,它仍然可以在app.heroku.com和yourcustomdomain.com上访问。
然后,更新您的iOS应用程序,为其端点使用新的自定义域。一旦它全部工作,减少DNS条目上的TTL,然后在新服务器上重新指定它。