0

Sinatraには、ステージング環境と本番環境の両方に対応するAPIがあります。リクエストがステージングサーバーから送信された場合、APIはステージングデータベースと通信する必要があります。要求が本番サーバーからのものである場合は、本番データベースと通信する必要があります。

すべてのアプリはHerokuにデプロイされます。

env['HTTP_HOST']リクエストがステージングからのものか本番からのものかを確認し、を設定するために使用できますdb_url

ただし、問題は、dbに接続するために実行されるActiveRecord初期化コードです。

db = URI.parse db_url
ActiveRecord::Base.establish_connection(
  :adapter  => db.scheme == 'postgres' ? 'postgresql' : db.scheme,
  :host     => db.host,
  :port     => db.port,
  :username => db.user,
  :password => db.password,
  :database => db.path[1..-1],
  :encoding => 'utf8'
)

各リクエストの前にこのコードを実行するのは理にかなっていますか?それはおそらく遅いでしょう...

もう1つの解決策は、APIの2つのインスタンスを実行することです。しかし、同じコードを2回デプロイする必要があります...

これを行うためのより良い方法はありますか?

4

1 に答える 1

4

標準的な慣行と常識では、運用アプリとステージング アプリを分けておく必要があります。2 つの異なるアプリを展開することに反対する理由はわかりませんが、それが、ステージングの問題によって運用アプリがつまずかないようにする唯一の方法です。

于 2012-11-15T23:24:09.457 に答える