1

Heroku でホストされている RESTful Rails アプリとやり取りするアプリが App Store にあります。トップ レベル ドメインを使用する代わりに、API のベース URL を myapp.heroku.com にハードコーディングするというひどい間違いを犯しました。

私は現在、新しいサーバーへの移行の過程にあるので、移行を iPhone アプリ ユーザーにシームレスにするためのオプションを確認しようとしています。そのherokuサブドメインから新しいサーバーアドレスにすべてのトラフィックをリダイレクトするRakeアプリを作成することを考えましたが、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

(このコードは、おそらく 1 つのメソッドに減らすことができます)

于 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 に答える