GCloud Rails 应用程序并将 Redis 密码保存在 .env 文件中

GCloud Rails application and keeping Redis password in an .env file

我有一个 Rails 5.2.3 (Ruby 2.6.3) 项目托管在 Google Cloud 上。

我目前正在根据 this guide from Google's docs.

设置 Sidekiq 和 Redis

我决定使用文档 Deploying to App Engine flexible environment 部分中的 foreman 选项,并且一直在寻找 app.yaml 文件。具体来说,我坚持如何提供 Redis URL、Redis 密码和 Rails 密钥,而不会在我的 git 历史记录中以明文形式公开它。

我在 GCloud 网站上找不到任何相关信息。我发现的唯一提到的 ENV 文件是 these pages of the GCloud docs,但这些只是为了让我可以指定特定的 ENV 变量以供我在 GCloud 上的应用程序使用,这在这种情况下不适用于我。

有什么方法可以让我从我的 .env 文件中读取 app.yaml 文件,或者更好的是,从我的 secrets.yaml 文件中读取文件?

我今天才真正意识到我误解了文档,尽管 Google 一开始并没有很好地说明这一点。

如果您查看我的 OP 中的 docs I referenced,他们会明确说明 environment_variables 只是让您能够通过 app.yaml 文件将 ENV 变量传递到应用程序中。我实际上不需要从文档中提供这一部分

env_variables:
  REDIS_URL: redis://[REDIS_IP_ADDRESS]:6379
  REDIS_PASSWORD: [PASSWORD]
  SECRET_KEY_BASE: [SECRET_KEY]

以上内容可以简单地在 sidekiq.rb 初始值设定项中使用 .envcredentials.yml 文件提供,以确保安全。

# initializers/sidekiq.rb

Sidekiq.configure_server do |config|
  Rails.env.production? ?
    config.redis = { url: Rails.application.credentials.redis_url,
                     password: Rails.application.credentials.redis_password
    } :
    config.redis = { url: 'redis://localhost:6379/1' }
end

Sidekiq.configure_client do |config|
  Rails.env.production? ?
    config.redis = { url: Rails.application.credentials.redis_url,
                     password: Rails.application.credentials.redis_password
    } :
    config.redis = { url: 'redis://localhost:6379/1' }
end

我已经向文档推送了一个 PR,让未来的用户更清楚地了解这个选项。