Answers:
在rails中,您可以创建配置对象并从中获取必要的信息:
config = Rails.configuration.database_configuration
host = config[Rails.env]["host"]
database = config[Rails.env]["database"]
username = config[Rails.env]["username"]
password = config[Rails.env]["password"]
有关详细信息,请参见Rails :: Configuration 文档。
这仅使用YAML :: load从数据库配置文件(database.yml
)中加载配置,您可以使用该文件从rails环境之外获取信息:
require 'YAML'
info = YAML::load(IO.read("database.yml"))
print info["production"]["host"]
print info["production"]["database"]
...
̶R̶a̶i̶l̶s̶.̶c̶o̶n̶f̶i̶g̶u̶r̶a̶t̶i̶o̶n̶
̶̶̶t̶h̶e̶n̶̶w̶h̶a̶t̶̶e̶e̶n̶ 我看到@KenB答案。
布莱恩(Bryan)在上述评论中的回答值得更多关注:
>> Rails.configuration.database_configuration[Rails.env]
=> {"encoding"=>"unicode", "username"=>"postgres", "adapter"=>"postgresql", "port"=>5432, "host"=>"localhost", "password"=>"postgres", "database"=>"mydb", "pool"=>5}
ActiveRecord::Base.connection_config
返回哈希中的连接配置:
=> {:adapter=>ADAPTER_NAME, :host=>HOST, :port=>PORT,
:database=>DB, :pool=>POOL, :username=>USERNAME,
:password=>PASSWORD}
正如tpett
他们的评论中所述:此解决方案考虑database.yml
了环境变量与环境变量之间的合并DATABASE_URL
。
database.yml
配置与DATABASE_URL
环境变量合并的唯一原因。
古老的问题,但这是我查找方法的第一站,因此我认为这可能会对其他人有所帮助。我通常在主目录中有.my.cnf文件。因此,在我的database.yml配置文件中使用'parseconfig'gem和一些ERB语法意味着我有了动态文件,可以很好地检查源代码控制并简化部署(对于我而言)。另请注意常用套接字列表,这使将我的应用程序移动到可能具有不同Unix套接字路径的其他操作系统变得更加容易。
<%
require 'parseconfig'
c=ParseConfig.new('../../.my.cnf') %>
mysqlevn: &mysql
adapter: mysql
username: <%= c.params['client']['user'] %>
password: <%= c.params['client']['password'] %>
host: localhost
socket: <%= [
'/var/run/mysqld/mysqld.sock',
'/var/lib/mysql/mysql.sock',
'/tmp/mysqld.sock',
'/tmp/mysql.sock'].detect { |socket| File.exist?(socket) } %>
production:
database: app_production
<<: *mysql
development:
database: app_development
<<: *mysql
# Do not set this db to the same as development or production.
test:
database: app_test
<<: *mysql
参考:http://effectif.com/articles/database-yml-should-be-checked-in
Rails.configuration