我正在构建一个Rails应用程序,使用Google Api Client Library for Ruby从Google Analytics中获取数据。
我正在使用OAuth2,在本地机器的开发环境中可以使所有东西正常工作。问题是该库使用一个下载的文件 client_secrets.json
来存储两个密钥。
问题: 我正在使用Heroku,并需要一种方法将文件发送到其生产服务器。
我不想将此文件添加到我的github存储库中,因为该项目是公共的。
如果有一种方式可以临时将该文件添加到git中,推送到Heroku并从git中删除,则可以。我的感觉是密钥将在提交中,很难防止在github上显示。
已尝试: 据我所知,您无法通过Bash控制台将文件SCP到Heroku。我认为在这样做时,您会获得一个新的Dyno,您添加的任何内容都将是暂时的。我尝试过这个,但无法使SCP正常工作,因此不确定100%。
已尝试: 我尝试了将JSON文件存储在环境或配置变量中,但无法使其正常工作。如果有人有想法,这似乎是最好的途径。当Ruby将JSON转换为字符串或哈希时,我经常遇到麻烦,因此可能只需要在这里获得指导。
已尝试: 此外,我尝试找出一种方法,仅从JSON文件中提取密钥,将其放入Config Vars,并将JSON文件添加到git中。但是,我无法弄清如何将 ENV["KEY"]
放入JSON文件中。
示例代码 Google库有一个方法,该方法加载JSON文件以创建授权客户端。然后,客户端会获取令牌(或给出授权URL)。
client_secrets = Google::APIClient::ClientSecrets.load('client_secrets.json')
auth_client = client_secrets.to_authorization
请注意,在Google页面上的示例没有显示文件名,因为它使用了默认的ENV变量,该变量已设置为路径。
我认为如果ClientSecrets.load()
方法只接受JSON、字符串或哈希并将其放入配置变量中,那么这一切都会更容易。
不幸的是,它似乎总是需要一个文件路径。当我提供JSON、字符串或哈希时,它就会崩溃。我在这里看到有人用p12密钥解决了这个问题,但我不确定如何在我的情况下复制这个方法。
未尝试:除了转移到AWS之外,我唯一的想法是将JSON文件放在AWS上,并在需要时让Rails获取它。我不确定是否可以即时完成这个操作,或者是否需要在Rails服务器启动时下载文件。看起来太麻烦了,但目前我已经花了几个小时在这个问题上,所以准备尝试。
这是我正在处理的特定控制器: https://github.com/dladowitz/slapafy/blob/master/app/controllers/welcome_controller.rb
GOOGLE_CLIENT_SECRETS: '{"web":{"client_id":"XXXXXX-XXXXXXXXXXXX.apps.googleusercontent.com","project_id":"XXXX-XXXX","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://accounts.google.com/o/oauth2/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"XXXXXXXXXX","redirect_uris":["http://localhost:3000/oauthredirect"]}}'
- David LadowitzGoogle::APIClient::ClientSecrets.load()
现在我使用的是Google::APIClient::ClientSecrets.new()
。 - David Ladowitz