1

我在 App Store 中有一个应用程序,它与 Heroku 上托管的 RESTful Rails 应用程序交互。我犯了一个可怕的错误,将 API 的基本 URL 硬编码到 myapp.heroku.com 而不是使用顶级域。

我现在正在迁移到新服务器,所以我想看看我有哪些选择可以让我的 iPhone 应用程序用户无缝过渡。我想创建一个 Rake 应用程序,将所有流量从 heroku 子域重定向到我的新服务器地址,但后来我读到 HTTP 1.1 不允许 POST 重定向(我的 API 有多个 POST 端点)。我总是可以将我的 POST 请求重定向为 GET 请求,但这绝对感觉不对。

还有其他我可能会错过的选择吗?Heroku 有什么方法可以接受将我的子域的 A 记录更改为指向我的新服务器 IP?

4

2 回答 2

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

(此代码可能会简化为单个方法)

于 2013-02-03T03:57:02.837 回答
1

他们不会为您更新他们的 DNS - *.heroku.com 将是一个通配符 DNS 条目,他们不会在每次添加站点时添加新的子域。

似乎最好的解决方案是正确修复它。将新域附加到 Heroku 上的现有应用程序,它仍然可以在 app.heroku.com 和 yourcustomdomain.com 上访问。

然后,更新您的 iOS 应用程序以将新的自定义域用于其端点。一切正常后,减少 DNS 条目上的 TTL,然后将其重新指向新服务器。

于 2012-08-10T07:36:49.353 回答