我正在写一个rake任务,它在Rails/ActiveRecord之外做一些DB工作.

有没有办法获取database.yml中定义的当前环境的数据库连接信息(主机、用户名、密码、数据库名称)?

我想得到它,这样我就可以用它来连接像这样...

con = Mysql.real_connect("host", "user", "pw", "current_db")

推荐答案

在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"]

有关详细信息,请参阅documentation for Rails::Configuration.

这只需要使用YAML::load从数据库配置文件(database.yml)加载配置,您可以使用该文件从rails环境外部获取信息:

require 'YAML'
info = YAML::load(IO.read("database.yml"))
print info["production"]["host"]
print info["production"]["database"]
...

Ruby-on-rails相关问答推荐

Rails 7通过引擎将方法自动加载到控制器中的方法

Rails 7.1.3如何在生产环境中查看堆栈跟踪

如何控制或定制S为模型使用的命名路由Rail()?

active_storage.resolve_model_to_route的不同值代表什么意思?

API Rails 路由,令牌是路由的一部分

Ruby 3 动态关键字参数

Rails 控制台 - 更新 Gem 后的弃用通知

验证模型属性大于另一个

如何使用 RSpec 和 Devise/CanCan 进行集成测试?

您将如何在 Ruby on Rails 应用程序中使用 rSpec 测试观察者?

ActiveRecord 回调列表

File.open,写入和保存?

Ruby - ActiveRecord::ConnectionNotEstablished

将 cookie 会话存储添加回 Rails API 应用程序

如何将字符串转换为类方法?

如何在不删除项目本身的情况下删除单个 HABTM 关联项目?

Ruby on Rails 中的MySQL 服务器已经消失

Rails 5:重命名表迁移

Mongoid OR 查询语法

将新管理员添加到活动管理员