我正在尝试为我的一个私人项目设置gitlab.com
持续集成(CI)。但是rails db:migrate
失败并出现以下错误:
ActiveSupport :: EncryptedFile :: MissingKeyError:缺少用于解密文件的加密密钥。向您的团队询问您的主密钥并将其写入/builds/shubh-muhurat/Backend/config/master.key或将其放入ENV [' RAILS_MASTER_KEY']
master key
不应该在存储库中,但如果我使用RAILS_MASTER_KEY
设置.gitlab-ci.yml
,我必须将主密钥提交到存储库。
那么有更好的方法来放置主密钥。
PS:我正在使用gitlab.com
CI。
版本: Rails 5.2.0.beta2
答案 0 :(得分:4)
我通过将主密钥添加到项目秘密变量中然后在before_script阶段注入它来解决这个问题:
- echo "$MASTER_KEY" > config/master.key
答案 1 :(得分:0)
在进行了一些研究之后,找到了最简单的声明变量的方法,我在GitLab中找到了Variables
部分。 Variables
部分位于存储库CI / CD设置下。还可以选择保护变量。
答案 2 :(得分:0)
我也遇到了同样的问题,并通过创建临时假的master.key和凭据.yml.enc来解决此问题。这使我的CI可以使用虚拟master.key而不显示真实密钥。
Dockerfile中的解决方法
# Precompile assets
# We use dummy master.key and credentials.yml.enc to workaround the fact that
# assets:precompile needs them but we don't want the real master.key to be built
# into the container. We will inject RAILS_MASTER_KEY env var when starting the
# container.
RUN if [[ "$RAILS_ENV" == "production" ]]; then \
mv config/credentials.yml.enc config/credentials.yml.enc.backup; \
mv config/credentials.yml.enc.sample config/credentials.yml.enc; \
mv config/master.key.sample config/master.key; \
bundle exec rails assets:precompile; \
mv config/credentials.yml.enc.backup config/credentials.yml.enc; \
rm config/master.key; \
fi