【发布时间】:2016-05-10 16:58:16
【问题描述】:
我正在构建一个 rails 应用程序,它使用适用于 Ruby 的 Google Api 客户端库从 Google Analytics 中提取数据。
我正在使用 OAuth2,并且可以在本地计算机上进行开发中的所有工作。我的问题是该库使用下载的文件client_secrets.json 来存储两个密钥。
问题:我正在使用 Heroku,需要一种方法将文件获取到他们的生产服务器。
我不想将此文件添加到我的 github 存储库中,因为该项目是公开的。
如果有办法将文件临时添加到 git,推送到 Heroku,然后从 git 中删除,那很好。我的感觉是密钥将在提交中,并且很难防止在 github 上显示。
试过了: 据我所知,您不能通过 Bash 控制台将文件 SCP 发送到 Heroku。我相信这样做时你会得到一个新的 Dyno,你添加的任何东西都只是暂时的。我试过了,但无法让 SCP 正常工作,所以不能 100% 确定这一点。
试过了: 我查看了将 JSON 文件存储在 Environment 或 Config Var 中,但无法使其正常工作。如果有人有想法,这似乎是最好的方法。当 ruby 将 JSON 转换为字符串或散列时,我经常遇到麻烦,所以我可能只需要这里的指导。
试过了:
此外,我试图找出一种方法来从 JSON 文件中提取密钥,将它们放入 Config Vars,然后将 JSON 文件添加到 git。不过,我想不出将ENV["KEY"] 放入JSON 文件的方法。
示例代码 Google library has a method 加载 JSON 文件以创建授权客户端。然后客户端获取令牌(或提供授权 url)。
client_secrets = Google::APIClient::ClientSecrets.load('client_secrets.json')
auth_client = client_secrets.to_authorization
** 请注意,谷歌页面上的示例没有显示文件名,因为它使用了设置为路径的默认 ENV Var
我认为如果ClientSecrets.load() 方法只采用JSON、字符串或哈希值,这一切都会容易得多,这些可以进入配置变量。
不幸的是,它似乎总是需要一个文件路径。当我给它提供 JSON、字符串或哈希时,它会爆炸。 I've seen someone get around the issue with a p12 key here,但我不确定如何在我的情况下复制它。
没试过: 我唯一的其他方法(除了迁移到 AWS 之外)是将 JSON 文件放在 AWS 上,并在需要时让 rails 将其拉出。我不确定这是否可以即时完成,或者在 rails 服务器启动时是否需要拉下文件。看起来工作量太大了,但在这一点上,我已经花了几个小时准备尝试。
这是我正在处理的特定控制器: https://github.com/dladowitz/slapafy/blob/master/app/controllers/welcome_controller.rb
【问题讨论】:
标签: ruby-on-rails ruby json git heroku