Docker Rails 迁移

5

我正在尝试使用Docker和Fig来运行我的Rails应用程序,其中包含Redis服务器、MongoDB、PostgreSQL和Nginx。 以下是我的fig.yml文件的样子:

pg:
  image: docker-index.my.com/postgres
  ports:
    - 5432
redis:
  image: docker-index.my.com/redis
  ports:
    - 6379
mongodb:
  image: docker-index.my.com/mongodb
  ports:
    - 27017
app:
  build: .
  command: bundle exec rails s
  volumes:
    - .:/beesor
  ports:
    - 3000:3000
  links:
    - pg
    - redis
    - mongodb
  environment:
    RAILS_ENV: production

一切都正常,直到启动应用程序的时候,由于Rails初始化程序钩子在服务器上开始工作,所以我遇到了有关数据库连接的错误,因为数据库不存在!当然,这是因为它没有在Dockerfile中创建(见下文)。

Dockerfile内容:

# DOCKER-VERSION 0.10.0
FROM docker-index.my.com/ruby:1.9.3
MAINTAINER my.com

RUN apt-get update -qq && apt-get install -y git-core xvfb curl nodejs libqt4-dev libgtk2.0-0 libgtkmm-3.0-1 libnotify4 sqlite3 libsqlite3-dev graphicsmagick imagemagick subversion libpq-dev libxml2-dev libxslt-dev git build-essential
RUN mkdir /my_app
WORKDIR /my_app

RUN gem install bundler

ADD Gemfile /my_app/Gemfile
ADD Gemfile.lock /my_app/Gemfile.lock
RUN bundle install
RUN bundle pack --all
ADD . /my_app

我看不到可以放置rake db:create db:migrate db:seed命令的位置!如果我把它们放在Dockerfile的末尾,那么当fig尝试构建应用程序时,它会抱怨数据库服务器不存在(在fig构建应用程序容器时,其他容器没有启动),我无法通过更改fig.yml中的顺序来解决这个问题。我在这里面临着一个“鸡蛋与先驱”的问题,如何让它工作?
我确信所有链接都完美地工作,因此问题更多地涉及脚本的编排。

我也在寻找答案...外面有很多低级别的教程...但是没有中级的 :( - BvuRVKyUVlViVIc7
请看一下我的答案! - Carlos Castellanos
不确定,但这可能有所帮助... https://dev59.com/TVwZ5IYBdhLWcg3wVfEC#31573537 - King'ori Maina
1个回答

2

找到解决方案了!:

我创建了一个rake任务来包装我需要的内容,它运行迁移、种子并启动Rails服务器,所以修复方法是通过以下命令更改fig上的命令:

command: rake my_app:setup


1
此外,请查看http://www.talkingquickly.co.uk/2014/06/rails-development-environment-with-vagrant-and-docker/底部的shell脚本配方。 - Martin
1
@CarlosCastellanos,你能分享一下你的rake任务或者更多关于如何运行它的细节吗? - King'ori Maina
我想通了,你只需要去做就行了! - Henry Edward Quinn IV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接