我正在将 vanilla Rails 6 应用程序部署到 Google Cloud 上的 App Engine Standard Ruby 2.5 运行时。
我无法弄清楚如何成功提供 RAILS_MASTER_KEY 环境变量,以便 Rails 可以解密我用于连接数据库等的加密凭据。
我不想将 RAILS_MASTER_KEY 放在 app.yaml 中,也不想在每次部署中都包含 master.key 文件。您可能知道,RAILS_MASTER_KEY 环境变量必须在 Rails 启动之前设置,因此无法从我的应用程序内部加载它。
在我的 App Engine Flex 上的 Rails 应用程序中,我一直在使用运行时配置和 rcloadenv gem,方法是在我的 app.yaml 中添加它: 入口点:
bundle exec rcloadenv secrets -- bin/rails s
但是当我在 App Engine Standard 上做同样的事情时,我得到了这个错误:
A 2019-08-23T11:47:45.986319Z /srv/vendor/bundle/ruby/2.5.0/bin/rcloadenv:23:in `load'
A 2019-08-23T11:47:45.986308Z LoadError: cannot load such file -- /srv/vendor/bundle/ruby/2.5.0/gems/rcloadenv-0.2.0/bin/rcloadenv
A 2019-08-23T11:47:45.986247Z bundler: failed to load command: rcloadenv (/srv/vendor/bundle/ruby/2.5.0/bin/rcloadenv)
我看到入门文档建议使用元数据服务器和 google-cloud-env gem,但我没有看到该 gem 中内置任何内容以使其将元数据作为环境变量加载。
有关我如何使用适用于 Ruby 2.5 的 App Engine Standard 的任何指示:
1) 可以让 rcloadenv gem 工作吗?
2) 或者可以获得 google-cloud-env gem 来将元数据加载到环境变量中?
3) 或者可以用 Rails 6 支持的另一种方式安全地存储和访问 RAILS_MASTER_KEY?
最佳答案
在gem release 0.2.0本身读取文件是权限错误。 解决方法是直接从 GitHub 安装 rcloadenv,您可以通过将 gemfile 中的 gem 替换为以下行来实现:
gem "rcloadenv", git: 'https://github.com/GoogleCloudPlatform/rcloadenv', branch: 'master', glob: 'ruby/*.gemspec'
使用元数据的解决方法在 AppEngine Standard 中不起作用。
关于ruby-on-rails - App Engine Standard Ruby 2.5 上 Rails 6 应用程序的安全配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57653432/