我在我的〜/ .bashrc文件中设置了我希望与我的Rails应用程序一起使用的变量。问题是Rails不会识别这些变量。
bashrc中:
export MYSQL_DB_USERNAME=admin
export MYSQL_DB_PASSWORD=testing123
Rails app - database.yml
username: <%= ENV["MYSQL_DB_USERNAME"] %>
password: <%= ENV["MYSQL_DB_PASSWORD"] %>
如果我进入rails控制台并输入:
ENV["MYSQL_DB_USERNAME"]
我回来了:<= nil
我重新加载了我的bashrc文件并重新启动了终端。都没有奏效。为什么Rails不会从bashrc文件读取这些变量?
(我正在使用RVM进行ruby版本管理,如果重要的话)。
感谢。
答案 0 :(得分:6)
您可以将设置放在〜/ .bashrc的顶部。
因为mina在非交互模式下使用ssh。 在.bashrc的第一个文件中,它有
#If not running interactively, don't do anything
[ -z "$PS1" ] && return
此行下方的设置将被忽略。
答案 1 :(得分:2)
这取决于您运行rails应用程序的方式。
例如,如果你做了
export MYSQL_DB_USERNAME=admin
export MYSQL_DB_PASSWORD=testing123
rails console
> ENV["MYSQL_DB_USERNAME"]
然后很可能你的代码会起作用。如果您以不同的用户或守护程序/服务启动railsapp,那么它将不会共享相同的环境,并且您创建的环境变量将不再设置。
在我看来,设置变量的最佳方法是创建一个yaml配置文件。您可以执行/etc/myapp/config.yml并在其中设置以下内容
MYSQL_DB_USERNAME: admin
MYSQL_DB_PASSWORD: testing123
这应该比在.bashrc
文件中存储user_name /密码更清晰,因为你只允许rails用户通过文件权限读取它 - 你不想使用你的文件权限.bashrc
。