首页 > 解决方案 > Rails 6 rake assets:由于缺少 Master Key Env 变量,AWS 上的 Docker 预编译失败

问题描述

我有一个 Rails 6 应用程序,其凭据在本地 Docker 上运行。为了在 AWS ElasticBeanstalk 上启动并运行它,我想将资产预编译为 Docker 构建的一部分。但是,正如rails repo 中有关此问题的概述,我收到以下错误rake assets:precompile

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

我已经RAILS_MASTER_KEY在 EB 环境(配置 > 软件 > 修改)中添加了环境变量,但是在 Docker 构建期间它不会从那里读取 Env 变量。

允许 Docker 构建访问环境变量的最佳和最安全的方法是什么?assets:precompile我应该在部署之前运行我的吗?

在本地,我可以通过将密钥作为 build-arg 传递来在生产模式下预编译资产(请参阅 Dockerfile 中我解析 RAILS_MASTER_KEY 参数并设置它的部分),但是,这似乎不是生产的正确选择? 或者如果是,我应该怎么做?

我的 Dockerfile:

FROM ruby:2.6.3-slim
ARG RAILS_MASTER_KEY

bla bla install yarn etc

RUN gem install bundler
#Install gems
RUN mkdir /gems
WORKDIR /gems
COPY Gemfile .
COPY Gemfile.lock .
RUN bundle install

ARG INSTALL_PATH=/opt/my_app
ENV INSTALL_PATH $INSTALL_PATH
ENV RAILS_MASTER_KEY $RAILS_MASTER_KEY
WORKDIR $INSTALL_PATH
COPY . .

RUN RAILS_ENV=production rake assets:precompile

标签: ruby-on-railsdockeramazon-elastic-beanstalkruby-on-rails-6

解决方案


您添加的主密钥可能不正确。config/master.key在(本地)中检查主密钥。本地和 aws 中的主密钥必须相同。

此外,请确保在 AWS 中添加主密钥。进入控制台并使用 打印主密钥ENV['RAILS_MASTER_KEY']


推荐阅读