我有一个Rails 6应用程序,其凭据在Docker本地运行。
为了在AWS ElasticBeanstalk上启动并运行它,我想预编译 Assets 作为Docker构建的一部分。但是,如this issue in the 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构建访问Env变量的最佳和最安全的方法是什么?我应该在部署之前运行assets:precompile
吗?
在本地,我可以通过将Key作为build-arg传递给 Assets ,使其在生产模式下进行预编译(请参阅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']
打印主密钥。
关于ruby-on-rails - Rails 6 rake Assets :由于缺少Master Key Env变量而无法在AWS上使用Docker进行预编译失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58202309/