Я докеризирую свое приложение рельсов. Обычно я запускаю следующую команду для инициализации моей базы данных 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 пуст, хотя