【问题标题】:Environment variable in GemfileGemfile 中的环境变量
【发布时间】:2023-03-20 00:34:02
【问题描述】:

我在 Gemfile 中使用环境变量时遇到问题。
我正在尝试使用 API 密钥从私有 Github 存储库加载 gem:

auth = ENV['SECRET_GIT']
gem 'foobar', git: "https://#{auth}:x-oauth-basic@github.com/Foo/Bar.git"

但如果我 puts 我的 ENV['SECRET_GIT'] 变量,它里面什么都没有。
我认为您可以这样做是因为这些(尤其是第一个):
- https://devcenter.heroku.com/articles/bundler-configuration#gem-source-username-and-password
- https://stackoverflow.com/a/7338154/5353193
- Deploying to Heroku with environment variables in Gemfile

Bundler 版本 1.14.6
ruby 2.4.0p0

谢谢你的帮助

编辑
我正在尝试在本地环境中执行此操作,我想在 heroku 上执行此操作不会有问题。

【问题讨论】:

  • 我认为问题在于将auth 作为变量?在您提供的链接中,没有人以这种方式使用它,他们写在同一行中,如gem 'foobar', git: "https://#{ ENV['SECRET_GIT'] }:x-oauth-basic@github.com/Foo/Bar.git"
  • 我也试过这种方法,但它也不起作用。
  • 好的。只是我的好奇心,我们可以在 Gemfile 中有变量吗?我找不到关于那个的参考。你能提供一些链接吗?
  • 如果你在gemfile 中使用foo = 'bar',那么puts foo #=> 'bar' 就可以了;)
  • 您是否事先做了export SECRET_GIT="xxxxx",否则您如何在外壳中指定该环境变量?如果您已经这样做了,并且您正在使用带有 spring 的 rails,请尝试先停止 spring 服务器。

标签: ruby-on-rails heroku bundler gemfile


【解决方案1】:

是的,你可以从控制台设置它

heroku config:set SECRET_GIT=your-api-key

或者,您可以从 heroku dashbord 设置环境变量

heroku > your-app > settings > Config variables

并添加一个新条目

SECRET_GIT = your-api-key

现在你可以直接在Gemfile中使用了

gem 'foobar', git: "https://#{ENV['SECRET_GIT']}:x-oauth-basic@github.com/Foo/Bar.git"

【讨论】:

  • 感谢您的回答,我更准确地编辑了我的帖子:我正在尝试在本地环境中执行此操作。我有一个heroku_env.rb 文件,它应该模拟heroku 的环境变量(它已加载到我的application.rb 中)。也许这不是正确的做法......
  • 啊我没有这样使用环境变量
  • 如果你只想使用ENV['SECRET_GIT']你可以像SECRET_GIT=your-api bundle install一样使用
  • 问题在于我正在使用与我的队友共享的heroku_env.rb 文件(我猜他们不会乐于运行这个命令行而不是每次都只运行bundle ) :)
  • 是的,我知道痛苦 ;)
【解决方案2】:

从您的 cmets 了解到,您希望 heroku 配置在本地开发中可用。事实并非如此。

您需要要求您在 Gemfile 中提到的 heroku_env.rb。 Gemfile 只是一个在特定上下文中执行的普通 Ruby 文件。因此,您应该能够将 require 'config/heroku_env' 添加到顶部 - 或者您的路径是什么。记得省略最后的.rb


或者,试试heroku localhttps://devcenter.heroku.com/articles/heroku-local

【讨论】:

  • 感谢您指出这一点。我想我正在寻找你提到的东西(require 'config/heroku_env'),但它不是那样工作的。 Heroku local 对于一个变量来说似乎有点“矫枉过正”。
  • 有没有办法使用 Figaro 对 application.yml 文件执行此操作?
【解决方案3】:

感谢收到的回复(尤其是https://stackoverflow.com/a/42718962/5353193),我找到了解决方案。
我期待spring或其他东西会神奇地加载我的环境文件(因为没有为本地环境here指定任何内容)。

我把这段代码放在我的 Gemfile 的开头:

env = 'config/env.rb'
load(env) if File.exist?(env)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 2020-12-07
    • 2018-06-13
    • 1970-01-01
    • 2017-07-12
    相关资源
    最近更新 更多