<%
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
8条答案
按热度按时间g6baxovj1#
在Rails中,你可以创建一个配置对象,并从中获取必要的信息:
有关详细信息,请参阅documentation for Rails::Configuration。
这只是使用YAML::load从数据库配置文件(
database.yml
)加载配置,您可以使用它从rails环境外部获取信息:8hhllhi22#
布莱恩在上面评论中的回答值得更多的曝光:
rnmwe5a23#
以散列形式返回连接配置:
正如
tpett
在评论中所说:该解决方案考虑合并来自database.yml
和来自环境变量DATABASE_URL
的配置。9wbgstp74#
从Rails 6.1开始,
ActiveRecord::Base.connection_config
已被弃用。较新的访问器是ActiveRecord::Base.connection_db_config
sxpgvts35#
我认为这是最简单的解决方案。经过一些测试(至少在Rails 5.2中),这将正确地解析DATABASE_URL。
ds97pgxw6#
在Rails 6.1+中,您可以用途:
这将返回一个包含当前环境连接信息的哈希:
5sxhfpxr7#
老问题了,但这是我第一次去寻找如何做到这一点,所以我想这可能会帮助其他人。我通常在主目录中有.my.cnf文件。所以在我的数据库.yml配置文件中使用'parseconfig' gem和一些ERB语法意味着我有一个动态文件,我可以很好地签入源代码控制并简化部署(在我的例子中)。还要注意公共套接字的列表,这使得将我的应用程序移动到可能具有不同Unix套接字路径的不同操作系统更容易。
参考:http://effectif.com/articles/database-yml-should-be-checked-in
doinxwow8#
我试图获取用户名和密码以连接到pgAdmin,我尝试了上面的每一种方法,但在rails 7中无法找到我正在开发的数据库的
username
和password
的值。事实证明,pgAdmin实际上并不需要单个应用程序数据库的用户名和密码;相反,它将向postgres * 服务器 * 进行身份验证,因此可以访问服务器上的所有数据库。
这可能会解决那些出于与我类似的原因需要
username
和password
的人的问题。但这并不能解释为什么我无法为我的特定(rails 7)应用程序获取
username
和password
。我能猜到的最好的原因是因为Rails 7默认使用默认凭据连接到本地数据库。在我的例子中(PostgreSQL)默认使用用户名“postgres”,没有密码或密码为空。
因此,如果你签入
config/database.yml
,而开发环境引用的是default
,而这些默认值没有显式列出username
和password
的任何内容,那么它可能使用了你的数据库的默认creds。不过,我找不到任何方法来证实这一点,这只是我基于在rails 7的database.yml
中看到的怀疑,事实ENV
没有给出与db相关的任何内容,并且所有上述方法都没有给出结果。