0

错误消息:W:缺少用于解密文件的加密密钥。向您的团队询问您的主密钥并将其写入 /app/config/master.key 或将其放入 ENV['RAILS_MASTER_KEY']。

在 Platform.sh 上部署我的项目时,由于缺少解密密钥,操作失败。从我的谷歌搜索中,我发现了解密密钥。

我的 .bashrc

export RAILS_MASTER_KEY='ad5e30979672cdcc2dd4f4381704292a'

PLATFORM.SH 的 rails 项目配置

. 平台.app.yaml

   # The name of this app. Must be unique within a project.
name: app


type: 'ruby:2.7'

# The size of the persistent disk of the application (in MB).
disk: 5120


mounts:
  'web/uploads':
    source: local
    source_path: uploads


relationships:
    postgresdatabase: 'dbpostgres:postgresql'


hooks:
    build: |
      gem install bundler:2.2.5
      bundle install
      RAILS_ENV=production bundle exec rake assets:precompile
    deploy: |
      RACK_ENV=production bundle exec rake db:migrate
web: 
  upstream: 
    socket_family: "unix"
  commands: 
    start: "\"unicorn -l $SOCKET -E production config.ru\""
  locations: 
    '/': 
      root: "\"public\""
      passthru: true
      expires: "24h"
      allow: true

路线.yaml

    # Each route describes how an incoming URL is going to be processed by Platform.sh.
"https://www.{default}/":
    type: upstream
    upstream: "app:http"

"https://{default}/":
    type: redirect
    to: "https://www.{default}/"

服务.yaml

# The name given to the PostgreSQL service (lowercase alphanumeric only).
dbpostgres:
   
    type: postgresql:13

    # The disk attribute is the size of the persistent disk (in MB) allocated to the service.
    disk: 5120

db:
  type: postgresql:13
  disk: 5120
  configuration:
    extensions:
      - pgcrypto
      - plpgsql
      - uuid-ossp

环境/生产.rb

config.require_master_key = true

我怀疑在部署过程中无法访问master.key,我不明白如何解决问题。

4

1 回答 1

0

据我了解,您的导出位于.bashrc本地计算机上,因此在 Platform.sh 上部署时将无法访问。(您在构建和部署时在终端中看到的日志是流式传输的,这不会发生在您的机器上。)

您需要RAILS_MASTER_KEY在 Platform.sh 上进行访问。为此,需要在您的项目中声明此变量。

鉴于变量的性质,我建议使用Platform CLI创建此变量。如果您的所有环境都可以访问此变量,则可以将其设为项目级别变量

$ platform variable:create --level project --sensitive true env:RAILS_MASTER_KEY <your_key> 

如果它只能在特定环境中访问,那么您需要一个环境级别变量

$ platform variable:create --level environment --environment '<your_envrionment>' --inheritable false --sensitive true env:RAILS_MASTER_KEY '<your_key>'

变量名称中的env:前缀告诉 Platform.sh 将变量与其余环境变量一起公开。环境变量文档页面的变量前缀部分中有关此的更多信息。

如果您不想使用命令行,您可以通过管理控制台执行相同的操作。

环境变量也可以直接在您的.platform.app.yaml文件中配置,如此所述。请记住,此文件是版本控制的,您不应将此方法用于敏感信息,例如加密密钥、API 密钥和其他类型的机密。

现在RAILS_MASTER_KEY应该可以在 Platform.sh 部署期间访问环境变量。

于 2021-02-04T11:01:53.577 回答