bashrc环境变量不能与Rails应用程序一起使用

时间:2014-08-15 22:33:04

标签: ruby-on-rails bash ruby-on-rails-4

我在我的〜/ .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版本管理,如果重要的话)。

感谢。

2 个答案:

答案 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