Приложение Dockerizing Rails ActiveRecord :: NoEnvironmentInSchemaError при выполнении миграций - PullRequest
0 голосов
/ 17 апреля 2020

Я докеризирую свое приложение рельсов. Обычно я запускаю следующую команду для инициализации моей базы данных bundle exec rake db:reset db:migrate db:seed. Эта команда относится как к тестовой базе данных, так и к разработке. После Dockerization моего приложения, выполнение этой команды с использованием docker-composer, как это (docker-compose run web bundle exec rake db:reset db:migrate db:seed), приводит к этой ошибке:

rake aborted!
ActiveRecord::NoEnvironmentInSchemaError:

Environment data not found in the schema. To resolve this issue, run:

        bin/rails db:environment:set RAILS_ENV=development

/usr/local/bundle/gems/activerecord-5.2.3/lib/active_record/migration.rb:1135:in `last_stored_environment'
/usr/local/bundle/gems/activerecord-5.2.3/lib/active_record/tasks/database_tasks.rb:58:in `check_protected_environments!'
/usr/local/bundle/gems/activerecord-5.2.3/lib/active_record/railties/databases.rake:13:in `block (2 levels) in <main>'
/usr/local/bundle/gems/bugsnag-6.8.0/lib/bugsnag/integrations/rake.rb:18:in `execute_with_bugsnag'
/usr/local/bundle/gems/rake-12.3.3/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:30:in `block in <main>'
/usr/local/bin/bundle:22:in `<main>'
Tasks: TOP => db:reset => db:drop => db:check_protected_environments
(See full trace by running task with --trace)

Теперь интересно, когда я запускаю миграции с помощью этой команды docker-compose run web bundle exec rake db:create db:migrate она работала и я думаю, потому что эта команда влияет только на базу данных разработки. Кто-нибудь может мне помочь с управлением средами приложения rails, используя docker? Мне нужно удалить базу данных и запустить эту команду как для тестовой базы данных, так и для базы данных разработки.

Мой dockerfile прост и выглядит так:

FROM ruby:2.5.3

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

RUN mkdir /myapp
WORKDIR /myapp

COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock

RUN bundle install

COPY . /myapp

моя docker compose также проста :

version: '3'
services:
  db:
    image: postgres:12.2-alpine
    environment:
      POSTGRES_DB: 'db_dev'
      POSTGRES_HOST_AUTH_METHOD: "trust"
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3001:3001"
    depends_on:
      - db

Мой .env пуст, хотя

...