Gemfile中的环境变量

时间:2017-03-10 08:36:11

标签: ruby-on-rails heroku bundler gemfile

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

{...}

但是如果我import re string = your_string_here def getResults(needle=None): """ Analyze the outer structure """ # outer regex rx = re.compile(re.escape(needle) + r''' # escape the needle to look for \s* (?P<key>\w+) # the key \s*=\s* (?: (['"])(?P<value>.+?(?!\\))\2 # a single value | \{(?P<values>[^{}]+)\} # multiple values in {} )''', re.VERBOSE) def parseInnerValues(values=None): """ Parse the inner values """ # inner regex rxi = re.compile(r'''(["'])(.+?)(?<!\\)\1''') return [m.group(2) for m in rxi.finditer(values)] def getValues(match=None): """ Decide """ if match.group('values'): return parseInnerValues(match.group('values')) else: return match.group('value') matches = {match.group('key') : getValues(match) for match in rx.finditer(string) } return matches print(getResults('abc@2.0')) # {'dep': ['this', 'that'], 'someInfo': 'blahblah', 'name': 'abc'} 我的auth = ENV['SECRET_GIT'] gem 'foobar', git: "https://#{auth}:x-oauth-basic@github.com/Foo/Bar.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上执行此操作会没有问题。

3 个答案:

答案 0 :(得分: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"

答案 1 :(得分:1)

根据您的评论,我了解您希望heroku配置可在本地开发中使用。你认识的情况并非如此。

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

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

答案 2 :(得分:0)

我得到了一个解决方案,感谢我收到的回复(特别是https://stackoverflow.com/a/42718962/5353193) 我期待那个春天或某些东西会神奇地加载我的环境文件(因为没有为本地环境here指定任何内容)。

我将此代码放在 Gemfile

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