15

在 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 的某个地方吗?还是它们在系统级别?如果是这样,在哪里/如何设置,以便不需要登录用户帐户才能使它们有效?

4

2 回答 2

15

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

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

export MONGOID_USERNAME='username'

这些只对你的 shell 的生命有益,除非你将它们添加到你的配置文件中,但是你的 web 服务器很可能不会使用那个配置文件,所以它只对本地开发有用。

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

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

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

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

于 2011-02-11T20:44:37.253 回答
0

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

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

您可以通过以下方式验证这一点:

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

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

于 2013-08-28T21:39:22.140 回答