我在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上执行此操作会没有问题。
答案 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 local
:https://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)