2012-11-15 50 views
0

我們在Sinatra有一個API,可以同時爲分段環境和生產環境提供服務。如果請求來自登臺服務器,API應該與登臺數據庫進行交談。如果請求來自生產服務器,它應該與生產數據庫交談。Sinatra應用程序可以使用2個數據庫嗎?

所有應用程序都部署在Heroku上。

我們可以使用env['HTTP_HOST']來確定請求是來自分段還是生產,然後設置db_url

然而,問題是運行連接到數據庫的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' 
) 

是否有意義運行每個請求之前這段代碼?這可能會很慢...

另一個解決方案是運行API的兩個實例。但後來我們需要兩次部署相同的代碼...

有沒有更好的方法來做到這一點?

回答

4

標準實踐和常識說,你應該讓你的製作應用程序與你的舞臺應用程序分開。我不確定你有什麼反對部署兩個不同的應用程序,但這是確保分段中的問題不會影響您的產品應用程序的唯一方法。

+2

+1。不要組合您的舞臺和生產系統。有關哲學和最佳實踐的信息,請參閱[十二因子應用程序](http://www.12factor.net/)。它不一定很難。 – willglynn

+0

@willglynn - 真棒資源。 –

相關問題