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的兩個實例。但後來我們需要兩次部署相同的代碼...
有沒有更好的方法來做到這一點?
+1。不要組合您的舞臺和生產系統。有關哲學和最佳實踐的信息,請參閱[十二因子應用程序](http://www.12factor.net/)。它不一定很難。 – willglynn
@willglynn - 真棒資源。 –