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

Mel*_*emi 14 unix ruby-on-rails 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'] %>
Run Code Online (Sandbox Code Playgroud)

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

dan*_*ich 14

ENV哈希将具有来自rails进程启动时的系统环境的值.

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

export MONGOID_USERNAME='username'
Run Code Online (Sandbox Code Playgroud)

这些只对shell的生命周期有好处,除非您将它们添加到您的配置文件中,但您的Web服务器可能不会使用该配置文件,因此它仅对本地开发有用.

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

<Location /app >
    SetEnv MONGOID_HOST 'localhost'
    SetEnv MONGOID_PORT '8883'
    SetEnv MONGOID_USERNAME 'username'
</Location>
Run Code Online (Sandbox Code Playgroud)

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

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