Развертывание Ruby на Rails 6 - AWS Elasti c Beanstalk - Docker: ArgumentError: Отсутствует `secret_key_base` - PullRequest
0 голосов
/ 20 февраля 2020

Я не могу найти правильный способ установить secret_key_base для Ruby на Rails 6 - AWS Elasti c Beanstalk - Docker deploy. Таким образом, развертывание продолжает терпеть неудачу. Я пытался следовать этому руководству: https://dev.to/fdoxyz/elastic-beanstalk-apps-using-docker-containers-56l8

Система:

  • Ubuntu 18.04
  • ruby 2.6.5p114 (Версия 2019-10-01 67812) [x86_64-linux]
  • Версия Bundler 2.1.4
  • Rails 6.0.2.1
  • Docker версия 18.09.7, сборка 2d0083d
  • Узел v12.16.1

Вот шаги, которые я предпринимаю для развертывания из пустого каталога:

mkdir new_project && cd new_project
eb init
     2) us-west-1 : US West (N. California)
     2) [ Create new Application ]
     (default is "new_project")
     8) Docker
     Do you want to set up SSH for your instances? Y
     Select a keypair.

eb create
     Enter Environment Name (default is new-project-dev)
     Enter DNS CNAME prefix (default is new-project-dev)
     Select a load balancer type: 2) application
     enable Spot Fleet? n
     download the sample application into the current directory? n

eb setenv SECRET_KEY_BASE=$(ruby -e "require 'securerandom';puts SecureRandom.hex(64)")
eb setenv RAILS_ENV=production

cat .gitignore
rails new .
vim .gitignore (paste old contents of gitignore)
touch Dockerfile
vim Dockerfile

===============
FROM ruby:2.6.5

# Install NodeJS & Yarn
RUN apt-get update && \
    apt-get install apt-transport-https && \
    curl -sL https://deb.nodesource.com/setup_12.x | bash - && \
    apt-get purge nodejs && \
    apt-get update && \
    apt-get install nodejs -y && \
    npm install yarn -g  && \
    gem install bundler -v 2.1.4

# Workdir and add dependencies
WORKDIR /app/
ADD Gemfile Gemfile.lock /app/

# Throw errors if Gemfile has been modified since Gemfile.lock
RUN bundle config --global frozen 1

# Install dependencies
ARG RAILS_MASTER_KEY
ENV RAILS_ENV=production NODE_ENV=production RAILS_SERVE_STATIC_FILES=1
RUN bundle install --without development test

# Add the app code, precompile assets and use non-root user
ADD . /app/
RUN rake assets:precompile DISABLE_SPRING=1 && \
    chown -R nobody:nogroup /app
USER nobody
ENV HOME /app

# Make sure to explicitly bind to port & interface
CMD ["bundle", "exec", "rails s -p 3000 -b 0.0.0.0"]
===============

vim config/environments/production.rb
insert at the top of the file:
    config.secret_key_base = ENV["SECRET_KEY_BASE"]

git add . && git commit -m "Initial commit"
eb use new_project-dev
eb deploy

Полный журнал из s sh -в экземпляре в /var/log/eb-activity.log':

https://raw.githubusercontent.com/maxtocarev/eb-log/master/eb-activity.log

1 Ответ

0 голосов
/ 20 февраля 2020

secret_key_base - это значение, хранящееся в Зашифрованные учетные данные Rails . Похоже, команда rake assets:precompile изнутри Dockerfile завершается неудачно при построении образа Docker, потому что ей нужно значение secret_key_base. Я считаю, что это происходит потому, что в вашем местном проекте нет config/master.key. Я бы порекомендовал передать его в docker build, используя что-то вроде этого:

docker build  --build-arg RAILS_MASTER_KEY=${RAILS_MASTER_KEY} ...

Я определенно не рекомендовал бы включать config/master.key в сам проект из соображений безопасности, поэтому я бы использовал переменную ENV вместо этого.

В этом случае похоже, что вы используете "автоматическую сборку" Elasti c Beanstalk (что означает, что образ Docker создается при каждом развертывании из вашего исходного кода), так что вы не строит изображение вручную. Это можно исправить, добавив переменную RAILS_MASTER_KEY env с помощью eb setenv RAILS_MASTER_KEY=XXXXXXXX или из веб-консоли AWS.

...