首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法访问`database.yml`文件中的环境变量

无法访问`database.yml`文件中的环境变量
EN

Stack Overflow用户
提问于 2011-12-31 12:08:00
回答 2查看 23.7K关注 0票数 65

我的development.yml文件有以下开发部分:

代码语言:javascript
复制
development:
  adapter: postgresql
  host: localhost
  database: testtb
  username: app_user
  password: ENV['APP_USER_POSTGRES_PASSWORD']     <= Troublesome line

当我通过bundle exec rails console打开一个rails控制台并输入ENV['APP_USER_POSTGRES_PASSWORD']时,我得到了我在本地配置文件中指定的数据库密码。但是,当我启动rails服务器时,它无法连接到DB,失败

代码语言:javascript
复制
PGError FATAL:  password authentication failed for user "app_user"

以前,当我实际以纯文本形式输入数据库密码,而不是尝试通过ENV['...']访问它时,这种方法是有效的,但是由于显而易见的原因,我希望在提交对database.yml文件的其他不安全更改的同时,将实际密码完全排除在此文件之外(因此排除在代码存储库之外)。

是不是我遗漏了的语法有什么特殊之处,或者在加载database.yml文件时环境变量由于某种原因不可用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-31 13:22:39

更新:有些人在评论中报告说,这个doesn't work是从Rails 4.2.x.x开始的。我自己还没试过,所以YMMV。

啊,终于找到了一个简单的解决方案--它接受嵌入式Ruby:

代码语言:javascript
复制
password: <%= ENV['APP_USER_POSTGRES_PASSWORD'] %>
票数 165
EN

Stack Overflow用户

发布于 2016-05-30 12:50:20

简短快速的解决方案如果您运行的是Rails版本4.2以上的版本,请运行以下命令:

代码语言:javascript
复制
spring stop

..then运行rails console或其他rails命令。我的问题是需要重新启动Spring服务器,以便刷新/获取我的新ENV变量。我正在启动Rails控制台,直到我关闭Spring,它才能看到它们。

以前的Rails版本没有这个问题,因为它们没有使用Spring服务器。

另一个帮助您排除故障的工具--使用以下命令打印出您的database.yml配置。您可以从命令行运行它,但我更喜欢在Rails控制台中运行它,因为您可以使用awesome_print使其更美观:

rails console

代码语言:javascript
复制
puts ActiveRecord::Base.configurations

使用awesome_print的...or

代码语言:javascript
复制
ap ActiveRecord::Base.configurations

或者改为从命令行执行:

代码语言:javascript
复制
bin/rails runner 'puts ActiveRecord::Base.configurations'
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8686215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档