【问题标题】:bashrc environment variables not working with Rails appbashrc 环境变量不适用于 Rails 应用程序
【发布时间】:2014-08-15 22:33:03
【问题描述】:

我的 ~/.bashrc 文件中有设置变量,我想在我的 Rails 应用程序中使用这些变量。问题是 Rails 无法识别这些变量。

bashrc:

export MYSQL_DB_USERNAME=admin
export MYSQL_DB_PASSWORD=testing123

Rails 应用 - database.yml

  username: <%= ENV["MYSQL_DB_USERNAME"] %>
  password: <%= ENV["MYSQL_DB_PASSWORD"] %>

如果我进入 rails 控制台并输入:

ENV["MYSQL_DB_USERNAME"]

我回来了:&lt;= nil

我已经重新加载了我的 bashrc 文件并重新启动了终端。都没有奏效。为什么 Rails 不会从 bashrc 文件中读取这些变量?

(我正在使用 RVM 进行 ruby​​ 版本管理,以防万一)。

谢谢。

【问题讨论】:

  • 你可以在你的数据库 yml 中使用 erb 吗?见这里stackoverflow.com/questions/4204724/…
  • 您可以尝试在命令行中指定变量来看看会发生什么吗?例如:FOO=bar ruby -e "puts ENV['FOO']"
  • 只是为了确保:在运行 rails console 之前,您是否 source ~/.bashrc
  • @vee - 我发誓我试过了,当然,现在它正在工作。但问题 - 当我重新启动终端时,它会停止工作,直到我重新运行 source ~/.bashrc。我的 bashrc 文件中是否也需要该行?
  • 我在 bash_profile 的末尾添加了 source ~/.bashrc。这是个好主意吗?

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


【解决方案1】:

您可以将设置放在 ~/.bashrc 的顶部。

因为 mina 在非交互模式下使用 ssh。 在.bashrc的第一个文件中,它有

#If not running interactively, don't do anything
[ -z "$PS1" ] && return

此行下方的设置将被忽略。

【讨论】:

  • 我把我的变量声明放在 ~/.bashrc 文件的开头,它起作用了!
【解决方案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 文件中更干净,因为您可以只允许 rails 用户通过文件权限读取它 - 您不想使用您的文件权限 @987654324 @。

【讨论】:

  • 马丁 - 感谢您的回复!我想通了。一些愚蠢的操作顺序。
  • 有机会分享您的解决方案。我自己也有同样的问题
猜你喜欢
  • 2018-02-26
  • 2014-12-18
  • 2018-01-23
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
  • 2019-08-11
  • 2018-10-15
相关资源
最近更新 更多