使用github,heroku和本地开发时如何保护我的私钥?

Tim*_* T. 8 ruby-on-rails github heroku

目前,我把我用来访问environment.rb文件中的其他API等的密钥.这样,当我在本地运行时,以及在heroku上都可以使用它.

但是,我想开始通过github公开我的代码,这样我就可以得到一些帮助.

我需要做些什么来实现这一点,特别是我可以在本地测试并测试heroku.

似乎在heroku上有一种方法可以从命令行添加密钥,因此它们不需要驻留在ruby-on-rails应用程序中.但是对于本地发展呢?

Dan*_*vin 16

您可以使用环境变量(heroku上的config vars)来存储API密钥,而不是将它们检入源代码.

对于我正在处理的项目,我使用了一个twitter-auth的分支,并将其更改为从env变量中读取客户端密钥和密钥:

http://github.com/dpmcnevin/twitter-auth/blob/ace5d60a8ed8121cca4c97ef30a0cd025b99bfe1/lib/twitter_auth.rb#L68

OAuth::Consumer.new(
  ENV['oauth_consumer_key'] || config['oauth_consumer_key'],          
  ENV['oauth_consumer_secret'] || config['oauth_consumer_secret'],
  options 
)
Run Code Online (Sandbox Code Playgroud)

然后我.rvmrc在项目目录中设置我的密钥以供本地使用:

export oauth_consumer_key=xxxxxxxxxxxx
export oauth_consumer_secret=xxxxxxxxxxxxxxxxxxx
rvm ree@redactify
Run Code Online (Sandbox Code Playgroud)

最后在heroku上设置环境变量:

$ heroku config:add oauth_consumer_key=xxxxxxxxxxxxx
$ heroku config:add oauth_consumer_secret=xxxxxxxxxxxxx
$ heroku config
DATABASE_URL          => postgres://.....
RACK_ENV              => production
oauth_consumer_key    => xxxxxxxxxxxxxxxx
oauth_consumer_secret => xxxxxxxxxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

然后只需确保你.rvmrc.gitignore,然后你可以推送到github而不暴露任何API密钥.


Pet*_*own 4

将它们移至初始值设定项并将文件添加到 .gitignore

编辑:

config中有一个名为initializers的目录。您可以在此处放置应在应用程序启动时运行一次的代码。过去,environment.rb 用于这些设置,但初始化程序可以更好地组织事情。我会在初始化目录中创建一个名为“load_keys.rb”的文件或类似的文件。在此文件中,您可以将您不希望在 github 中使用的environment.rb 文件中的确切代码放入其中。