我正在寫Rake任務,它可以在Rails/ActiveRecord之外完成一些數據庫工作。你能在Rails中獲得DB用戶名,密碼,數據庫名稱嗎?
有沒有辦法獲得database.yml
中定義的當前環境的數據庫連接信息(主機,用戶名,密碼,數據庫名稱)?
我想獲得它,所以我可以用它來連接像這樣...
con = Mysql.real_connect("host", "user", "pw", "current_db")
我正在寫Rake任務,它可以在Rails/ActiveRecord之外完成一些數據庫工作。你能在Rails中獲得DB用戶名,密碼,數據庫名稱嗎?
有沒有辦法獲得database.yml
中定義的當前環境的數據庫連接信息(主機,用戶名,密碼,數據庫名稱)?
我想獲得它,所以我可以用它來連接像這樣...
con = Mysql.real_connect("host", "user", "pw", "current_db")
從內軌道您可以創建一個配置對象並獲得其所需的信息:
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的documentation。
這只是使用YAML::load從數據庫配置文件(database.yml
),你可以用自己的軌道環境的外部獲取信息加載配置:
require 'YAML'
info = YAML::load(IO.read("database.yml"))
print info["production"]["host"]
print info["production"]["database"]
...
布賴恩在評論回答上述值得多一點曝光:
>> Rails.configuration.database_configuration[Rails.env]
=> {"encoding"=>"unicode", "username"=>"postgres", "adapter"=>"postgresql", "port"=>5432, "host"=>"localhost", "password"=>"postgres", "database"=>"mydb", "pool"=>5}
老問題,但這個是我第一次站之一的仰視如何做到這一點,所以我推測,這可能幫助別人。我通常在主目錄中有.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
REF:http://effectif.com/articles/database-yml-should-be-checked-in
ActiveRecord::Base.connection_config
返回散列連接配置:
=> {:adapter=>ADAPTER_NAME, :host=>HOST, :port=>PORT,
:database=>DB, :pool=>POOL, :username=>USERNAME,
:password=>PASSWORD}
如tpett
指出在它們的註釋:這個溶液佔從合併的配置database.yml
和環境變量le DATABASE_URL
。
在最近的Rails中,你不需要創建配置,你可以通過Rails.configuration` – 2010-08-18 17:37:43
獲取rails 3.0.0,require'yaml'和YAML :: load(IO.read(「 config/database.yml「))工作正常! – 2014-01-02 14:26:07
如果其中一些具有零值(在我的情況下:主機,用戶名和密碼),那麼Rails將使用哪些默認值? – Dennis 2014-05-26 18:48:45