LoginSignup
7
8

More than 5 years have passed since last update.

herokuで動かしてる既存railsプロジェクトの開発環境をdocker-composeで作る

Last updated at Posted at 2017-03-29

環境

  • os: macOS Sierra(10.12.4)
  • docker for mac(17.0.3.0-ce-mac2)
  • git

ゴール

herokuで稼働中のrailsプロジェクトをローカルのdockerで動かすところまでをゴールとします。前提として、開発環境では今までsqlite3を使っていましたが、dockerでは本番環境(heroku)と同じpostgresを使います。モチベーションとしては、開発環境を本番環境に近づけることにあります。

手順

gitリポジトリをローカルへclone

heroku git:clone -a project_nameとかでもできるみたいですが、未確認です。

 $ git clone https://.../my_heroku_project.git
 $ cd my_heroku_project

Gemfileとconfig/database.ymlを編集(ここはDBMS変更時のみ)

以下では差分のみ書き出してます。

Gemfile
diff --git a/Gemfile b/Gemfile
index 27352ae..2033fcb 100644
--- a/Gemfile
+++ b/Gemfile
@@ -14,7 +14,7 @@ gem 'sdoc',         '0.4.0', group: :doc

 group :development, :test do
   gem 'bullet', '4.14.0'
-  gem 'sqlite3', '1.3.9'
+  gem 'pg', '0.17.1'

pgは本番環境でも使うのでまとめられるのですが、あえてこう書いています。

config/database.yml
 default: &default
-  adapter: sqlite3
+  adapter: postgresql 
   pool: 5
   timeout: 5000
+  encoding: utf8
+  database: postgres
+  username: postgres
+  password:
+  host: db

 development:
   <<: *default
-  database: db/development.sqlite3
+  database: my_heroku_project_development 

 # Warning: The database defined as "test" will be erased and
 # re-generated from your development database when you run "rake".
 # Do not set this db to the same as development or production.
 test:
   <<: *default
-  database: db/test.sqlite3
+  database: my_heroku_project_test 

dockerコンテナのビルド

次のDockerfileとdocker-compose.ymlをmy_heroku_project/に配置します。rubyとpostgresのバージョンはherokuに合わせています。

Dockerfile
FROM ruby:2.1.10
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install --without production
ADD . /myapp
docker-compose.yml
version: '2'
services:
  db:
    image: postgres:9.6.2
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
     - "3000:3000"
    depends_on:
      - db

docker-compose buildでビルドします。ビルドが終わったらdocker-compose up -dで動かします。立ち上がったらdocker-compose run web rake db:migrateしてからlocalhost:3000をブラウザで開けば動いていることが確認できます。

開発はローカルにあるファイルを編集すれば反映されます。今の構成だとdocker-compose buildする度にgemのインストールをしたり時間がかかります。時間はかかるんですが、個人的にはそれをする頻度はそれほど高く無いのと、それを解決するのは後からでも良いと考え、まず導入してみることにしました。

おまけ

psqlを起動する方法を書いておきます。個人的に少し解決に時間がかかりました。

bash
docker-compose run db psql -h db -p "5432" -U postgres
7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8