Ruby on Rails - 如何检索连接字符串

13

有没有一种方法可以检索数据库连接字符串,以便了解我的 Ruby 连接的:

1)Ruby 连接的数据库名称 2)SQL Server 的用户名 3)SQL Server 的密码 4)服务器名称

我希望将其存储在会话变量中。

(我正在使用 MS SQL Server。)

请帮忙!谢谢!


我甚至不想问你为什么想要将这些存储在会话变量中。好的,你为什么想要将这些内容存储在会话中呢? - theIV
因为我需要调用一个CGI应用程序,而这个CGI需要连接到我的Ruby连接的数据库。请注意,每个客户端都有不同的连接字符串,因此CGI应用程序的连接字符串应该是动态的,取决于Ruby连接字符串。希望你能帮助我解决这个问题。谢谢。 - Jett
6个回答

15

我会选择ActiveRecord::Base.connection_config,它返回一个包含ActiveRecord 3选项的哈希。


7
您可以通过以下方式访问数据库.yaml中描述的所有属性:
ActiveRecord::Base.configurations["development"] => 
{"encoding"=>"utf8", "username"=>"foo", "adapter"=>"mysql", "database"=>"bar_development", "host"=>"localhost", "password"=> "baz"} 

这对我来说完美地解决了问题。我需要编写一个rake任务,将我们的生产数据库mysqldump,并且不想在database.yml文件之外硬编码连接字符串。 - Chris Allen Lane

1

数据库:ActiveRecord::Base.connection.current_database

您还可以使用以下的正则表达式:

ActiveRecord::Base.connection.inspect

但是,这是一个糟糕的想法。


使用 ActiveRecord::Base.connection.inspect 可以显示用户名和密码,但我在正则表达式方面遇到了问题,我无法仅获取密码。 - Jett

0

有一个 connection_db_config 函数,它返回一个 ActiveRecord::DatabaseConfigurations::UrlConfig 对象,它看起来像这样

> ActiveRecord::Base.connection_db_config
=> #<ActiveRecord::DatabaseConfigurations::UrlConfig:0x000055794c915ad0
 @configuration_hash=
  {:adapter=>"postgresql",
   :encoding=>"unicode",
   :pool=>5,
   :username=>"postgres",
   :password=>nil,
   :host=>"localhost",
   :port=>5432,
   :database=>"oyster_development"},
 @env_name="development",
 @name="primary",
 @url="postgresql://postgres@localhost:5432">

调用url将会给你连接的URL:

> ActiveRecord::Base.connection_db_config.url
=> "postgresql://postgres@localhost:5432"

你可以将它与数据库名称连接起来,以获取(我认为)完整的连接字符串

> "#{ActiveRecord::Base.connection_db_config.url}/#{ActiveRecord::Base.connection_db_config.database}"
=> "postgresql://postgres@localhost:5432/your_project_development"

0

这些值都存储在文件config/database.yml中,但据我所知,您无法从控制器内部将这些值作为变量访问。


您的应用程序可以读取/解释config/database.yml文件。然后,它将拥有关于所需操作的所有信息。 - Larry K

-1
最受欢迎的答案在较新版本的Ruby上不再有效。以下内容可以实现相同功能。
Rails.configuration.database_configuration[Rails.env]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接