在我的环境中,部署服务器具有很多位于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