0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

環境構築で苦戦

Posted at

calender-app.setting

bash

$ touch {docker-compose.yml,Dockerfile,Gemfile,Gemfile.lock,entrypoint.sh}

Dockerfile

# Rubyのバージョンを指定した公式イメージをベースに使用
FROM ruby:3.2.2

# 必要なパッケージのインストール
RUN apt-get update -qq \
 && apt-get install -y nodejs postgresql-client npm vim \
 && rm -rf /var/lib/apt/lists/* \
 && npm install --global yarn

# コンテナの作業ディレクトリを指定
RUN mkdir /myapp
WORKDIR /myapp

# ホストのGemfileとGemfile.lockをコンテナにコピー
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock

# bundle installを実行
RUN bundle install

# カレントディレクトリのファイルをコンテナにコピー
ADD . /myapp

# コンテナ起動時に実行されるスクリプトをコピーして実行可能にする
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh

# コンテナが外部に公開するポート番号を指定
EXPOSE 3000

# コンテナ起動時に実行されるメインプロセスを指定
CMD ["rails", "server", "-b", "0.0.0.0"]

docker-compose.yml

services:
  db:
    image: postgres
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_volume:/var/lib/postgresql/data
    restart: always
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bin/dev"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    restart: always
    tty: true
    stdin_open: true
    depends_on:
      - db
volumes:
  postgres_volume:

entrypoint.sh

#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"

Gemfile

source "https://rubygems.org"
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

# Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main"
gem "rails", "~> 7.0.8"

bash

$ docker compose run web rails new . --force --database=postgresql --javascript=esbuild --css=tailwind

$ docker compose down --remove-orphans

$ docker compose up --build

$ docker compose run web rails db:create

$ docker compose run web rails db:migrate

database.yml

default: &default
  adapter: postgresql
  encoding: unicode
  # ここから
  host: db
  username: postgres
  password: password
    # ここまで
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

Procfile.dev

web: env RUBY_DEBUG_OPEN=true bin/rails server -b '0.0.0.0' -p 3000
js: yarn build --watch
css: yarn build:css --watch

bash

docker compose up -d
補足

なぜかTailwindを書くと反映されない時があるので

$ docker compose exec web rails assets:precompile

をしてからコンテナを再起動すると反映される様になる。


なぜか rails newをした後に、
docker compose run web rails db:createをすると下の様なエラーが出るので

rails-2.0.10, stimulus-rails-1.3.4, cssbundling-rails-1.4.1, jbuilder-2.13.0, bootsnap-1.18.4, debug-1.9.2, web-console-4.2.1, capybara-3.40.0, selenium-webdriver-4.25.0, sprockets-4.2.1, msgpack-1.7.3, irb-1.14.1, reline-0.5.10, bindex-0.8.1, addressable-2.8.7, regexp_parser-2.9.2, xpath-3.2.0, base64-0.2.0, logger-1.6.1, rexml-3.3.8, rubyzip-2.3.2, websocket-1.2.11, rdoc-6.7.0, io-console-0.7.2, public_suffix-6.0.1, psych-5.1.2, stringio-3.1.1 in locally installed gems
Run `bundle install --gemfile /myapp/Gemfile` to install missing gems.

これは、 docker compose run web bundle installをしても出来なかったので、
Dockerの環境を整理するために孤立したコンテナ(orphans)を削除してから再び環境を起動して再びデーターベースを作成したらできる様になりました。

  • 私なりに考えた結果
    Railsプロジェクトの依存関係が解決できていない状態だったのでbuildを先にすればよかったのかなと思いました
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?