ruby-on-rails - 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
解决方案
您添加的主密钥可能不正确。config/master.key
在(本地)中检查主密钥。本地和 aws 中的主密钥必须相同。
此外,请确保在 AWS 中添加主密钥。进入控制台并使用 打印主密钥ENV['RAILS_MASTER_KEY']
。
推荐阅读
- java - 单击按钮时,如何在我的项目文件夹中打开随机 jFrame?
- solr - org.apache.lucene.Scorer 中 freq() 方法的替代方法
- css - 居中 ::before 1 个位置的列表内容
- python-3.x - 在 python 中使用 numpy 格式化半结构数据
- tensorflow - ModuleNotFoundError:没有名为“nets”的模块(我已经在文件夹中有网络)
- c - c 中的已退出分段错误
- laravel - 数据库队列连接在生产中不起作用
- excel - 宏运行时错误 5 无效的过程调用或争论
- c# - 从另一个调用 HTTP 触发的 Azure 函数
- data-structures - 使用递归在 Python 中反序列化二叉树