0

ERROR MESSAGE: W: Missing encryption key to decrypt file with. Ask your team for your master key and write it to /app/config/master.key or put it in the ENV['RAILS_MASTER_KEY'].

when deploying my project on Platform.sh, the operation failed because of the lack of the decryption key. from my google search, I found that the decryption key.

My Ubuntu .bashrc

export RAILS_MASTER_KEY='ad5e30979672cdcc2dd4f4381704292a'

rails project configuration for PLATFORM.SH

.platform.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

routes.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}/"

services.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

environments/production.rb

config.require_master_key = true

I suspect that the master.key is not accessible during deployment, and I don't understand how to solve the problem.

1 Answers1

0

From what I understand, your export is in your .bashrc on your local machine, so it won't be accessible when deploying on Platform.sh. (The logs you see in your terminal when building and deploying are streamed, this doesn't happen on your machine.)

You need to make the RAILS_MASTER_KEY accessible on Platform.sh. To do so, this variable needs to be declared in your project.

Given the nature of the variable, I would suggest to use the Platform CLI to create this variable. If this variable should be accessible on all your environments, you can make it a project level variable.

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

If it should only be accessible for a specific environment, then you need an environment level variable:

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

The env: prefix in the variable names tells Platform.sh to expose the variable with the rest of the environment variables. More information about this in the variables prefix section of the environment variables documentation page.

You could do the same via the management console if you prefer to avoid the command line.

Environment variables can also be configured directly in your .platform.app.yaml file, as described here. Keep in mind that this file being versioned, you should not use this method for sensitive information, such as encryption keys, API keys, and other kind of secrets.

The RAILS_MASTER_KEY environment variable should now be accessible during your Platform.sh deployment.