【发布时间】:2021-04-09 12:19:40
【问题描述】:
我已经设置了一个辅助数据库 YAML 文件,如下所示:
# config/remote_database.yml
default: &default
adapter: postgresql
encoding: unicode
pool: 5
development:
<<: *default
database: 'cexplorer'
username: <%= ENV['HOST_PG_DATABASE_USERNAME'] %>
password: <%= ENV['HOST_PG_DATABASE_PASSWORD'] %>
host: <%= ENV['HOST_PG_DATABASE_IP'] %>
port: 5432
此 YAML 文件是从创建变量以用于establish_connection 的初始化程序中读取的:
# config/initializers/remote_database.rb
REMOTE_DB = YAML.load_file(File.join(Rails.root, "config", "remote_database.yml"))[Rails.env.to_s]
当我使用byebug 检查 REMOTE_DB 的外观时,我看到 ENV 变量是使用占位符而不是变量本身读取的,即使变量可用。
# app/models/remote_record.rb
class RemoteRecord < ActiveRecord::Base
byebug
establish_connection REMOTE_DB
end
[1, 5] in /Users/sergio/Documents/github/swan-to-db-sync-backend/app/models/db_sync_record.rb
1: class RemoteRecord < ActiveRecord::Base
2: byebug
=> 3: establish_connection DB_SYNC_DB
4: # REMOTE_DB is defined in `config/initializers/db_sync_database.rb`
5: end
(byebug) REMOTE_DB
{"adapter"=>"postgresql", "encoding"=>"unicode", "pool"=>5, "database"=>"cexplorer", "username"=>"<%= ENV['HOST_PG_DATABASE_USERNAME'] %>", "password"=>"<%= ENV['HOST_PG_DATABASE_PASSWORD'] %>", "host"=>"<%= ENV['HOST_PG_DATABASE_IP'] %>", "port"=>"5432"}
(byebug) ENV['HOST_PG_DATABASE_USERNAME']
"postgres"
(byebug)
如何在 REMOTE_DB 中获取实际的 ENV 变量值?
【问题讨论】:
标签: ruby-on-rails ruby environment-variables yaml