jef*_*unt 64 yaml ruby-on-rails environment-variables ruby-on-rails-2
我有以下development.yml文件的开发部分:
development:
adapter: postgresql
host: localhost
database: testtb
username: app_user
password: ENV['APP_USER_POSTGRES_PASSWORD'] <= Troublesome line
Run Code Online (Sandbox Code Playgroud)
当我打开一个rails控制台bundle exec rails console并键入时,ENV['APP_USER_POSTGRES_PASSWORD']我会回到我在本地配置文件中指定的数据库密码.但是,当我启动我的rails服务器时,它无法连接到数据库,失败了
PGError FATAL: password authentication failed for user "app_user"
Run Code Online (Sandbox Code Playgroud)
这是以前的工作,当我用纯文本输入数据库密码,而不是试图通过它来访问它ENV['...'],但出于显而易见的原因,我想完全保留这个文件的实际密码(因此在代码库之外)同时仍然能够对文件进行其他非安全更改database.yml.
我缺少的语法有什么特别之处,或者database.yml在加载文件时由于某种原因环境变量不可用?
jef*_*unt 164
更新:有些人在评论中报告说这不适用于Rails 4.2.xx我自己没有尝试过,所以YMMV.
啊,终于找到了简单的解决方案 - 它接受嵌入式Ruby:
password: <%= ENV['APP_USER_POSTGRES_PASSWORD'] %>
Run Code Online (Sandbox Code Playgroud)
Fir*_*gon 23
如果您运行的是较新的Rails版本,请使用简短快速的解决方案!运行以下命令:
spring stop
Run Code Online (Sandbox Code Playgroud)
..然后运行rails console或其他rails命令.我的问题是需要重新启动Spring服务器以刷新/拾取我的新ENV变量.我正在启动Rails控制台,直到关闭Spring才能看到它们.
以前版本的Rails没有这个问题,因为他们没有使用Spring服务器.
另一个帮助您排除故障的工具 - 使用以下命令打印出您的database.yml配置.您可以从命令行运行它,但我更喜欢在Rails控制台中运行它,因为那时您可以使用awesome_print使其漂亮:
内rails console:
puts ActiveRecord::Base.configurations
Run Code Online (Sandbox Code Playgroud)
...或使用awesome_print
ap ActiveRecord::Base.configurations
Run Code Online (Sandbox Code Playgroud)
或者从命令行:
bin/rails runner 'puts ActiveRecord::Base.configurations'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22292 次 |
| 最近记录: |