【问题标题】:Set environment variable (ENV) for use in Rails设置用于 Rails 的环境变量 (ENV)
【发布时间】:2011-06-25 19:35:33
【问题描述】:

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

【问题讨论】:

  • 您不必使用这些 MONGOID_ 环境变量——您可以直接在 yaml 文件中设置值。
  • 是的,但我正在尝试学习最佳实践。我也不希望将密码嵌入代码中,从而嵌入 git 中。

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


【解决方案1】:

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

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

export MONGOID_USERNAME='username'

除非您将它们添加到您的配置文件中,否则这些仅对您的 shell 的生命周期有益,但您的网络服务器很可能不会使用该配置文件,因此它仅对本地开发有用。

它们也可以设置,例如,在 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 文件夹结构。

【讨论】:

  • Apache、Nginx 还是独立的?
  • 我们使用 Apache 和 Passenger
  • 我们执行default.yml & 然后在 Cap 配方中为我们的 SQL 数据库复制实际的 database.yml 但我看到在 MongoID 的默认设置中使用了环境变量,所以我想我会调查。感谢 Apache SetEnv 信息!
【解决方案2】:

我想在这里添加另一个选项。在启动时,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-23
    • 2016-08-11
    • 2022-07-20
    • 2014-07-15
    • 2015-10-21
    • 2018-07-14
    • 2017-09-02
    • 2021-05-16
    相关资源
    最近更新 更多