设置环境变量(ENV)以在Rails中使用

时间:2011-02-11 20:34:03

标签: ruby-on-rails unix environment-variables osx-server

在Rails服务器上试验MongoID,并对如何/在何处设置环境变量感到困惑。

config/mongoid.yml默认模板提供:

defaults: &defaults
  host: localhost

...

# set these environment variables on your prod server
production:
  host: <%= ENV['MONGOID_HOST'] %>
  port: <%= ENV['MONGOID_PORT'] %>
  username: <%= ENV['MONGOID_USERNAME'] %>
  password: <%= ENV['MONGOID_PASSWORD'] %>
  database: <%= ENV['MONGOID_DATABASE'] %>

我的问题是这些是在Rails中设置的吗?或者他们是在系统级别?如果是,那么在何处/如何设置,以便不需要登录任何用户帐户才能使它们有效?

2 个答案:

答案 0 :(得分:14)

ENV散列将具有来自rails进程启动时系统环境的值。

可以在启动服务器或程序之前在命令行上设置它们。例如在bash中:

export MONGOID_USERNAME='username'

除非您将它们添加到您的个人资料中,否则它们仅适用于您的shell的生命周期,但您的Web服务器可能不会使用该配置文件,因此它仅对本地开发有用。

例如,也可以使用SetEnv在Apache中设置它们。例如:

<Location /app >
    SetEnv MONGOID_HOST 'localhost'
    SetEnv MONGOID_PORT '8883'
    SetEnv MONGOID_USERNAME 'username'
</Location>

这可能是您的apache配置中SetEnv合法的任何地方,这与您的应用程序所在的上下文相同。

关于您对最佳做法的评论,有些人在源代码管理中放置了一个示例yml配置文件,并忽略源代码管理中的config/*.yml文件。克隆存储库时,将示例复制并更正为正确的值是设置的一部分,例如运行rake tmp:create来创建tmp文件夹结构。

答案 1 :(得分:0)

我想在这里添加另一个选项。在启动时,Rails将尝试将DATABASE_URL作为URL读取并从该env变量连接到数据库(忽略database.yml)。您应该将数据库指定为:

DATABASE_URL="mysql2://user:pass@localhost/app_development" rails server

您可以通过以下方式验证:

DATABASE_URL="..." rails runner "p ActiveRecord::Base.connection_config"

这只是另一种选择,而不是将erb设置放入database.yml

相关问题