ActiveRecord::ProtectedEnvironmentError после второго запуска docker-compose up

Я создаю два контейнера докеров для приложения и базы данных. При первом запуске docker-compose up приложение работает. Однако в следующих попытках появляется:

Database 'time_distribution_production' already exists.
ActiveRecord::ProtectedEnvironmentError: You are attempting to run a destructive action against your 'production' database.
If you are sure you want to continue, run the same command with the environment variable:
DISABLE_DATABASE_ENVIRONMENT_CHECK=1

Докерфайл

FROM ruby:3.1.2

ENV BUNDLER_VERSION=2.3.24

RUN apt update -qq && apt install -y libmsgpack-dev postgresql-client

RUN gem install bundler -v 2.3.24

RUN mkdir /time-distribution
WORKDIR /time-distribution

ENV RAILS_ENV production

COPY Gemfile .
COPY Gemfile.lock .

RUN bundle install

COPY . .

EXPOSE 3000

RUN chmod +x docker.sh
CMD ./docker.sh

докер.ш

#!/bin/bash
set -e

rm -f tmp/pids/server.pid

bundle exec rails db:setup
bundle exec rails db:migrate
bundle exec rails assets:precompile

bundle exec rails server -p 3000 -b '0.0.0.0'

докер-compose.production.yml

version: '3'

services:
  app:
    image: $IMAGE_NAME
    restart: always

  database:
    restart: always

database.yml для рабочей базы данных

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>


production:
  <<: *default
  database: <%= Rails.application.credentials.dig(:production, :postgres_name) %>
  username: <%= Rails.application.credentials.dig(:production, :postgres_username) %>
  password: <%= Rails.application.credentials.dig(:production, :postgres_password) %>
  host: database

Я заметил, что ошибка исчезает при сбросе громкости: docker compose down -volumes. Я попытался перезапустить контейнеры на сервере. Это не помогло. Подскажите пожалуйста как решить проблему. Заранее большое спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта команда в вашем docker.sh

bundle exec rails db:setup

удалит все данные в базе данных. Это, конечно, не то, что вы хотите делать в своей производственной среде.

Вместо этого я предлагаю просто попытаться создать базу данных с помощью

bundle exec rails db:create

Что не удается, когда база данных уже существует, но это можно игнорировать. На следующем шаге миграция будет работать независимо от того, является ли база данных совершенно новой или существовала ранее:

bundle exec rails db:create
bundle exec rails db:migrate
bundle exec rails assets:precompile

Другие вопросы по теме