DockerベースのRuby on Railsのテンプレートを作った話
Ruby on RailsでサクッとAPIを作ってサクッとHeroku等にデプロイできるように、テンプレートとなるDockerベースのプロジェクトが欲しかったので作ったという話です。
行った手順
Docker ComposeでのRoRプロジェクトの作り方は公式が出しているものが参考になります。
が、このままだとDocker for Windowsでうまく動かなかったり、Herokuにデプロイ出来なかったりする(2018年7月現在)ので以下のように変えました。
Dockerfile
FROM ruby:2.5.1 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 CMD ["rails", "s", "-b", "0.0.0.0"]
docker-compose.yml
version: '3' services: db: image: postgres volumes: - postgres_db:/var/lib/postgresql/data web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp ports: - "3000:3000" depends_on: - db volumes: postgres_db:
これら以外は概ねリンクの通りです。ただし、APIモードで使いたいのでrails new
するときに--api
オプションを付けました。
次にRSpecとFactoryBotとFakerを導入しました。
Gemfile
以下を追記
# for unit test group :development, :test do gem 'rspec-rails' gem 'factory_bot_rails' gem 'rails-controller-testing' gem 'faker' end
ここで再度ビルドしてrspecの初期化をしました。僕はdocker-compose
をdco
にエイリアスしているので適宜読み替えるか登録してください。(エイリアスを設定するのはおすすめです。)
dco build dco run web rails g rspec:install
.rspec
以下を追記
--format documentation
spec/rails_helper.rb
以下のように編集
RSpec.configure do |config| # ... config.include FactoryBot::Syntax::Methods end
config/application.rb
以下のように編集
module Myapp class Application < Rails::Application # ... # rails generateの挙動の設定 config.generators do |g| # テストフレームワークにRSpecを用いる g.test_framework :rspec, fixtures: true, view_specs: false, helper_specs: false, routing_specs: false, controller_specs: true, request_specs: false # fixtureの代わりにFactory Botを使う g.fixture_replacement :factory_bot, dir: "spec/factories" end end end
ここまで行った状態で、起動してみます。
dco run web rails db:create dco up
localhost:3000
でYay! You’re on Rails!が見れました。
Herokuにデプロイする
buildが済んでいる状態で
heroku login heroku create hoge-fuga heroku container:login heroku container:push web heroku container:release web heroku addons:create heroku-postgresql:hobby-dev heroku run rails db:migrate heroku open
rails console等にもアクセスできます。
heroku run rails console