【问题标题】:Heroku and gems only for production environmentHeroku 和 gems 仅用于生产环境
【发布时间】:2013-05-17 10:49:44
【问题描述】:

我有一个应用程序必须在三个不同的环境中运行,称为 dev、beta 和 prod。

我在 heroku 上创建了三个不同的应用程序,因此所有环境都可以同时运行,并且我在需要时将代码从正确的 git repo 部署到正确的应用程序。我认为这是完全正常的情况:-)

我在 git 上有一个分支用于开发目的,当我需要时,我会分支一个 beta 版本以在 beta 上部署,当它准备好时,我在 prod 上部署并合并回主干,遵循 branching model

我想将 New Relic 监控系统作为 Heroku 插件添加到其中一个应用程序,即生产应用程序中。 要安装 New Relic,您必须在 Gemfile 中包含一个 gem,所以我只需要在生产 Gemfile 中包含 gem。

鉴于 Heroku 上的当前堆栈不支持 Gemfile 中的组,我该如何实现这个目标?在投入生产之前,我是否必须手动管理每个 gem 文件?

编辑

为了更好地说明我的尝试,也许我遗漏了一些明显的东西:

我加了

group :production do
   gem 'newrelic_rpm'
end

到 Gemfile。 我的开发环境已将 RACK_ENV 和 RAILS_ENV 设置为开发,当我推送到 heroku 时,应用程序将使用 newrelic gem 进行部署。

【问题讨论】:

    标签: git heroku production-environment gemfile


    【解决方案1】:

    鉴于 Heroku 上的当前堆栈不支持 宝石文件

    我不认为这是一个准确的说法。

    group :production do
      gem 'some_production_gem'
    end
    

    只会在production 环境中安装some_production_gem。使用 RACK_ENVRAILS_ENV 环境变量为您的单独应用程序管理它。如果您在 Heroku 环境变量中指定 RAILS_ENV: staging,我相信 group :staging 会起作用。

    【讨论】:

    • 感谢您的回复,但正如我在 devcenter.heroku.com/articles/… 上发现的那样“请注意 - 目前,Cedar 堆栈不支持 BUNDLE_WITHOUT。”因此,如果我使用 group 语句指定 gem,这根本不重要,heroku 也会将 gem 带到我的开发或登台或任何环境中。我尝试使用 New Relic,并立即仔细监控了我在开发环境中的应用程序 :-)。但也许我错过了什么......
    【解决方案2】:

    来自https://devcenter.heroku.com/articles/bundler#specifying-gems-and-groups ...

    如果您想在 cedar 上使用 BUNDLE_WITHOUT,您需要启用 user-env-compile 功能标志。启用功能标志后,您可以使用 BUNDLE_WITHOUT 配置变量排除安装某些组:

    $ heroku config:set BUNDLE_WITHOUT="development:test"
    

    来自https://devcenter.heroku.com/articles/labs-user-env-compile#enabling ...

    启用该功能:

    $ heroku labs:enable user-env-compile -a myapp
    

    Heroku 的安全说明:

    不鼓励使用user-env-compile 功能,因为它将您的配置变量以明文形式写入 slug

    【讨论】:

      猜你喜欢
      • 2021-12-26
      • 2021-02-08
      • 2023-03-13
      • 2018-08-25
      • 2017-11-30
      • 2019-07-06
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      相关资源
      最近更新 更多