ruby-on-rails - App Engine Standard Ruby 2.5 上 Rails 6 应用程序的安全配置

标签 ruby-on-rails ruby google-app-engine google-cloud-platform bundler

我正在将 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/

相关文章:

ruby - 解释一下为什么这个 Ruby 脚本中会抛出 TypeError

google-app-engine - Google Pub/Sub 推送消息不适用于启用 IAP 的应用引擎

ruby-on-rails - 使用 Devise Rails 的用户和管理员之间的唯一 ID

ruby - 运行 gem specific_install 时出错

ruby-on-rails - 如何从 IRB 运行 .rb 文件?

google-app-engine - 无法访问本地主机上的 API 资源管理器

python - 数据存储。未找到对象属性,尽管它存在于数据存储区中

css - 我应该如何处理包含 ruby​​ 和 CSS 的重复使用的代码块?

ruby-on-rails - Ruby on Rails 的 Karma/Reputation 插件?

ruby-on-rails - 如何设置动态属性