我的 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 文件中导出,但在阅读了这个问题后,我意识到这不是正确的方法。搜索后,我偶然发现了这篇博文,所以我按照说明创建了这三个文件:
/usr/local/etc/env
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;
我已经重新启动我的服务器无济于事。有任何想法吗?