【问题标题】:Deploying to Heroku with environment variables in Gemfile在 Gemfile 中使用环境变量部署到 Heroku
【发布时间】:2015-01-27 14:21:10
【问题描述】:

我最近将我们的 Gemfile 更新为 pry-byebugbye-bug 导致我的一些同事的 Rubymine 崩溃。由于我们中有些人使用其他编辑器,因此我在 Gemfile 中添加了一个环境变量:

if ENV["USE_DEBUGGER"]
  gem "pry-byebug"
  gem "byebug"
end

这在我们的本地机器上运行良好,但部署到 Heroku 会导致以下错误:gist

我尝试运行bundle install 并提交一个新的Gemfile.lock,但这并没有改变。摆脱控制流声明或简单地删除 gem 可以解决问题。在同一次提交中,我将所需的 ruby​​ 版本提升到 2.2.0 是毫无价值的

有什么方法可以在Gemfile 中使用条件语句而不会炸毁 Heroku?

【问题讨论】:

  • 几乎在发布这个问题后,我刚刚意识到为什么会这样: env 变量是在我的本地 repo 中定义的,这导致 Gemfile.lock 包含两个 gem,但是因为变量不是在 Heroku 中定义的 gem 不是由 bundle 安装的,但 Gemfile.lock 仍然需要它,导致各种问题......

标签: ruby-on-rails git heroku rubymine


【解决方案1】:

将条件包装在一个组中,并在部署时尝试BUNDLE_WITHOUTref

group :byebug do
  if ENV["USE_DEBUGGER"]
    gem "pry-byebug"
    gem "byebug"
  end
end

heroku config:add BUNDLE_WITHOUT="byebug"

【讨论】:

  • 您好,谢谢您的回答。我忘了提到这两个 gem 都在 development 组中,正如你在要点中看到的那样,我已经在运行 BUNDLE_WITHOUT="development:test" - 所以理论上这些 gem 不应该安装,但不知何故我仍然得到冲突。
  • 好的,抱歉我错过了。是的,我的下一个猜测是 Gemfile.lock。您是否能够解决部署问题?
【解决方案2】:

好吧,在使用 RubyMine 之后,我意识到当requireing pry 和任何其他相关的调试 gem 时会出现问题。我设法通过将我的 Gemfile 更新为以下内容来解决此问题:

  if ENV["USE_DEBUGGER"]
    gem "pry-byebug"
    gem "byebug"
  else
    gem "pry-byebug", require: false
    gem "byebug", require: false
  end

我希望这可以帮助任何面临类似问题的人。

【讨论】:

    猜你喜欢
    • 2021-03-09
    • 2017-06-25
    • 2021-01-06
    • 2023-03-20
    • 2016-06-04
    • 1970-01-01
    • 2021-02-17
    • 2020-04-21
    • 2022-10-23
    相关资源
    最近更新 更多