【问题标题】:docker compose rails app is asking for migration to be ran when it was already ran in builddocker compose rails app 要求在已在构建中运行迁移时运行
【发布时间】:2017-09-08 11:03:12
【问题描述】:

所以我已经预先构建了一个 rails 应用程序的 docker 映像。构建映像后,将运行迁移。当我使用docker run 运行图像时,一切正常。但是当我尝试运行 docker-compose 文件时,当我访问应用程序时,它告诉我需要运行迁移,但迁移是在构建步骤中运行的。

文件夹结构:

root/
  my_app/
  Dockerfile
  docker-compose

这是我采取的步骤:

我在 Dockerfile 上运行 docker build -t my_app .:

FROM ruby:2.4-jessie

WORKDIR /usr/src/app
COPY ./my_app/Gemfile* ./
RUN bundle install
COPY ./my_app .
EXPOSE 3000

RUN rails db:migrate

CMD ["rails", "server", "-b", "0.0.0.0"]

一切正常,我可以看到迁移已成功运行。

接下来我用docker run -p 3000:3000 my_app运行它

我在浏览器中访问它,一切都很好。

接下来我在 docker-compose 文件上运行docker-compose up:

version: '3'

services:
  my-app-container:
    image: my_app
    volumes:
      - ./my_app:/usr/src/app
    ports:
      - 3000:3000

图像开始正常,但是当我在浏览器中访问它时得到:

Migrations are pending. To resolve this issue, run: bin/rails db:migrate RAILS_ENV=development 

# Raises <tt>ActiveRecord::PendingMigrationError</tt> error if any migrations are pending.
def check_pending!(connection = Base.connection)
  raise ActiveRecord::PendingMigrationError if ActiveRecord::Migrator.needs_migration?(connection)
end

【问题讨论】:

  • 你试过 bin/rails db:migrate RAILS_ENV=development from terminal 吗?

标签: ruby-on-rails docker docker-compose rails-migrations


【解决方案1】:

先将命令添加到 Dockerfile,但必须将它们添加到 docker-compose.yml 或手动调用

docker-compose up 之后可以向容器发送命令

docker exec -it 'container name/id' rails db:migrate 或其他命令。 -it 用于容器内的交互式终端

【讨论】:

    【解决方案2】:

    好的,所以解决方案是在 docker-compose 文件中使用命令来处理迁移和启动 rails 应用程序:

    version: '3'
    
    services:
      my-app-run-container:
        image: my_app_run_container
        volumes:
          - ./my_app:/usr/src/app
        ports:
          - 3000:3000
        command: rails db:migrate
        command: rails server -b 0.0.0.0
    

    我想如果我要使用 docker-compose 来完成我可以从 Dockerfile 中删除迁移和服务器启动命令的所有内容

    【讨论】:

      猜你喜欢
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      相关资源
      最近更新 更多