database - Rails 无法正确读取 database.yml 中的环境变量

标签 database ruby-on-rails-3 environment-variables passenger

我的 database.yml 是这样设置的:

development:
  adapter: mysql2
  encoding: utf8
  database: devel
  username: root
  host: localhost
  port: 3306
  timeout: 5000

# ... snip ...

production:
  adapter: mysql2
  encoding: utf8
  database: prod
  username: <%= ENV["DB_USER"] %>
  password: <%= ENV["DB_PASSWORD"] %>
  host: <%= ENV["DB_HOST"] %>
  port: 3306
  timeout: 5000

问题是,尽管设置了我的环境变量,但 Rails 没有正确读取这些变量。当我在 EC2 上启动由 Phusion 支持的 Nginx 服务器时,我收到以下消息:

Access denied for user 'root'@'localhost' (using password: NO) (Mysql2::Error)

我确认 Phusion 正在生产环境中启动 Rails;我将开发和测试配置中的用户名和主机更改为唯一名称,并且 'root'@'localhost' 始终显示为错误消息。此外,如果我将用户名和密码硬编码到 YAML 文件中,服务器将正常启动。

我怀疑我没有正确设置我的环境变量,因为 MySQL 一直声称我试图以“root”身份登录而没有密码。我最初将它们从 .bashrc 文件中导出,但在阅读 this question 之后,我意识到这不是正确的方法。四处寻找后,我偶然发现了this blog post ,所以我按照说明创建了这三个文件:

/usr/local/etc/环境

export RAILS_ENV=production
export DB_PASSWORD= (snip)
export DB_USER=doorbells

/usr/local/etc/ruby_wrapper

#!/bin/sh

source /usr/local/etc/env
exec /home/rooby/.rvm/wrappers/ruby-1.9.3-p362@doorbells-dev/ruby "$@"

/etc/profile.d/env.sh

#!/bin/sh

source /usr/local/etc/env

在我的 nginx.conf 文件中,我使用了这一行:

passenger_ruby /usr/local/etc/ruby_wrapper;

我已经重新启动了我的服务器,但无济于事。有什么想法吗?

最佳答案

我在 Ubuntu 12.04 上遇到了同样的问题。

我在 nginx 错误日志 (/var/log/nginx/error.log/) 中看到了

[ ... ]: [App 8509 stderr] /path/to/ruby_wrapper.sh: 2: /path/to/ruby_wrapper.sh: 
[ ... ]: [App 8509 stdout] 
[ ... ]: [App 8509 stderr] source: not found

/bin/sh 似乎不理解source命令。因此,我将其更改为一个简单的 ,它的作用相同。

完全改变的 ruby_wrapper.sh 看起来像:

#!/bin/sh

. /usr/local/etc/env
exec /home/rooby/.rvm/wrappers/ruby-1.9.3-p362@doorbells-dev/ruby "$@"

这对你有帮助吗?

关于database - Rails 无法正确读取 database.yml 中的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14331571/

相关文章:

SQL:将 SELECT 输出提供给 LIKE

asp.net - Firebird 是适用于 ASP.NET 的良好嵌入式数据库吗?还有哪个?

jquery - 与 Foundation 一起启动新的 Rails 项目

javascript - 如何在编辑模式+rails下获取CKEditor中的源代码?

ruby-on-rails - 单表继承中的 counter_cache

php - 哪个 Symfony 环境变量在哪个文件中可用(.env、.env.local 等)?

c# - Winforms 设计器 : Possible to programmatically achieve Project Variables?

mysql - 如何在 SUM 生成的列上找到 MAX 值

database - JPA:将默认列值设置为数据库中的序列

bash - 找出上次在 bash 中设置环境变量的位置