🛤️
Rails 6 + mongoidを動かすためのDocker構成
この記事では書かない前提
- ローカル環境にruby, bundler, rails, dockerはインストール済みであること
- rbenvなどを使ってrubyのバージョンを2.7.4にすること
参考文献
だいたい以下のURLの記事の内容をまとめているだけですが、この記事通りにやってもbundleとかyarnでハマります
- https://docs.docker.com/samples/rails/
- https://docs.mongodb.com/mongoid/current/tutorials/getting-started-rails/
RailsをActiveRecordなし、Testなしで生成
ポイント
- mongoidを使うのならActiveRecordは無効にしなければならない
- TestはRSpecで書きたいのでrails new時には生成させない
rails new myrail --skip-bundle --skip-active-record --skip-test --skip-system-test
Railsにmongoidを導入する
- Gemfileに
gem 'mongoid'
を追記 -
bundle install
する -
bundle exec rails g mongoid:config
する -
config/mongoid.yml
のdevelopmentのhostをmogodb:27017
に書き換える
Railsを動かすためのDockerfileを書く
ポイント
- Rails 6はyarnがないと実行時に壊れる
- bundleコマンドにはpathを指定しないとおかしくなる
Dockerfile
FROM ruby:2.7.4-slim
WORKDIR /app
RUN apt-get update -y -qq && \
apt-get install -y -qq \
curl \
git-core \
build-essential \
libmagickwand-dev \
nodejs \
&& \
rm -rf /var/lib/apt/lists/*
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && apt-get install yarn && \
rm -rf /var/lib/apt/lists/*
COPY Gemfile Gemfile.lock /app/
ENV BUNDLE_APP_CONFIG=.bundle BUNDLE_PATH=/bundle
RUN bundler version && bundle install --path=/bundle --jobs=4
COPY . /app/
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
entrypoint.sh
#!/bin/bash
set -e
rm -f /app/tmp/pids/server.pid
exec "$@"
RailsとMongoDBを同時に動かすためのdocker-compose.ymlを書く
- https://docs.docker.com/samples/rails/ を参考にMongoDB向けにアレンジした
docker-compose.yml
version: "3.9"
services:
mongodb:
image: mongo
ports:
- 27017:27017
volumes:
- mongodb:/data/db
restart: unless-stopped
networks:
- myrail
rails:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
env_file:
- .env
volumes:
- .:/app
- bundle:/bundle
ports:
- 3000:3000
depends_on:
- mongodb
networks:
- myrail
volumes:
mongodb:
driver: local
bundle:
driver: local
networks:
myrail:
name: myrail
mongoidでModelを作る
- https://docs.mongodb.com/mongoid/current/tutorials/getting-started-rails/ を参考にする
-
rails g scaffold Post title:string body:text
とかやってrails s
して http://localhost:3000/posts にアクセスすれば動くはず
以上です。
Discussion