LoginSignup
2
3

Docker, Rails7.1.3.2で環境構築する

Posted at

初めに

初学者です。
webアプリを個人で開発するために、dockerを使用してruby on railsでの開発環境構築を実施した際の記録を共有します。
公開日時点での最新安定版を使用しています。

この記事で成功する前に一度挑戦し、上手くいかなかった時の記録はこちら。
https://qiita.com/tkhero555/items/87df4562c8745ef0b6ef

構築したい技術構成

カテゴリ 技術
フロントエンド javascript/Hotwire/bootstrap 
バックエンド ruby3.3.0/rails7.1.3.2
データベース PostgreSQL16.2
認証 devise
環境構築 Docker / docker-compose
CI/CD Github Actions
インフラ  heroku

docker関連のファイル作成 ~rails newまで

新しいディレクトリを作成し、docker関連のファイルを作成する。

Dockerfile

# 現在の最新の安定版
FROM ruby:3.3.0
# 必要なパッケージをインストール
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
# ディレクトリを作成する これはコンテナの中の話
RUN mkdir /myapp
# 作業ディレクトリを指定する
WORKDIR /myapp
# gemfileをコンテナに追加する
ADD Gemfile /myapp/Gemfile
# gemfile.lockをコンテナに追加する
ADD Gemfile.lock /myapp/Gemfile.lock
# gemfileに記述された依存関係をインストール
RUN bundle install
# そのほかのファイルをmyappに追加
ADD . /myapp

Gemfile

source 'https://rubygems.org'
gem 'rails'
compose.yaml
version: '3'
services:
  db:
    image: postgres
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_HOST_AUTH_METHOD=trust
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

コンテナを起動してrails new

docker compose run web rails new . --force --database=postgresql

rails関連のファイルが自動生成され、Dockerfileの中身がrails7.1が自動生成するものに入れ替わっている。
この自動生成Dockerfileは本番環境を想定しており、今回は上手く使えないので、冒頭で作成したDockerfileの内容に戻す。
(本番環境用ファイルを使いたい場合は、Dockerfile.prodなどのファイル名で置いておくといいかもしれない)

Dockerfileの中身を戻したら、イメージをbuildする。

docker compose build

database.yamlの記述を書き換える。

database.yaml
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password: password
  pool: 5

development:
  <<: *default
  database: myapp_development


test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  database: myapp_production

データベースを作成する。

docker compose run web rake db:create
[+] Creating 1/0
 ✔ Container docker_setting1-db-1  Running                                                     0.0s 
Created database 'myapp_development'
Created database 'myapp_test'

コンテナを起動してlocalhostにrailsアプリが表示されていることを確認する

docker compose up

gem installとgenerate controllerをしてみる

今回制作するアプリではLINEBOTを使用したいので、line-bot-api gemを導入して、controllerを作成する。
この動作までを無事に完了できるかで、環境構築が成功しているかを確認する。

Gemfileに追記

gem 'line-bot-api'

bundle install

docker compose run web bundle install

イメージを再度buildする。

docker compose build

コントローラーを生成する。

docker compose run web bundle exec rails g controller LineBot
[+] Creating 1/0
 ✔ Container docker_setting1-db-1  Running                                                     0.0s 
      create  app/controllers/line_bot_controller.rb
      invoke  erb
      create    app/views/line_bot
      invoke  test_unit
      create    test/controllers/line_bot_controller_test.rb
      invoke  helper
      create    app/helpers/line_bot_helper.rb
      invoke    test_unit

コントローラーも無事作成できたので、環境構築は成功!

参考記事・サイト

2
3
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
2
3