在我的環境中,部署服務器具有很多位於database.yml中的連接信息。也就是說,他們知道他們是開發人員,測試人員還是生產服務器,並且他們知道他們各自的數據庫連接信息。重寫database.yml的策略?
我可以封裝在例如服務器級別的此信息,這樣我就可以檢索信息:
Server["environment"] #=> production
Server["db_host"] #=> db5.example.com
Server["db_password"] #=> [a decrypted password]
等。我想部署一個Rails應用程序,並根據服務器設置自動配置它。做這個的最好方式是什麼?要做到這一點
一種方法是再培訓局我的database.yml:
<%= Server["environment"] %>:
adapter: oracle_enhanced
host: <%= Server["db_host"] %>
username: db_user
password: <%= Server["password"] %>
我不是太激動不已做這種方式,但它的工作。在這種情況下,我會在哪裏放置定義Server類的'server.rb' - 在yml中需要它嗎?在ActiveRecord加載database.yml後,app/initializers會被加載。
另一種可能的解決方案是以某種方式覆蓋railties'數據庫初始化:
# File railties/lib/initializer.rb, line 903
def database_configuration
require 'erb'
YAML::load(ERB.new(IO.read(database_configuration_file)).result)
end
上面被稱爲僅當:active_record在config.frameworks定義。我不確定我會如何在Rails的啓動順序中儘早覆蓋這一點。
也許第三個選項是刪除:active_record from config.frameworks,然後在應用程序初始化程序中稍後創建連接?恐怕這可能會帶來很多意想不到的副作用。
我是希望有一些簡單而明顯的我沒有找到的東西,例如ActiveRecord功能,它允許我選擇退出database.yml並以編程方式提供備用配置。
我一個內置的解決方案,希望爲虛線。很明顯,幾年前Rails核心團隊就一個補丁提出了一個補丁,該補丁提供了一個替代database.yml的ruby補丁,並得到了一些支持,但它被拒絕了。 http://www.mail-archive.com/[email protected]/msg06694.html – 2010-11-17 13:35:01
注意:從Rails 3.1.2開始,'database_configuration'方法位於'Rails :: Application :: Configuration'中。在以前的版本中,它在'Rails :: Configuration'中。 – 2011-11-21 15:35:03