環境構築で苦戦

# 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を先にすればよかったのかなと思いました