LoginSignup
0
0

More than 1 year has passed since last update.

自作アプリpart1

Posted at

記録用

自作アプリを制作するにあたり、どういったことをしたのか覚えておくために、記録しておく。

参考
【rails環境構築】docker + rails + mysql で環境構築(初心者でも30分で完了!)
[Rails] DockerでRails + MySQLの開発環境をつくる手順
DockerでMysqlへのdb:createに失敗する

dockerでの環境構築

アプリのディレクトリを作るVScodeで開き、そこのターミナルに記述

touch Dockerfile docker-compose.yml Gemfile Gemfile.lock .gitignore

主に5つのファイルが必要。

Dockerfile

FROM ruby:3.2.2
#使用するイメージとバージョン
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
#Railsで開発する時に必要。-qqはエラー以外何も吐かない。-yは全部yesで実行。

RUN mkdir /myapp
WORKDIR /myapp
#作業ディレクトリの設定

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

RUN bundle install
COPY . /myapp
#ホスト側のディレクトリとか全部をコンテナ側にコピー

Gemfile

source 'https://rubygems.org'

ruby '3.2.2'

gem 'rails', '~> 7.0.4.3'

Gemfile.lockは空

docker-compose.yml

#バージョンを書くのは現在では意味がないらしい
services: #アプリケーションを動かすための各要素をserviceと呼ぶ。webとdbと名づける。
  db:
    image: mysql:latest
    ports: #コンテナ内のポート番号をホストの番号にマッピングするという意味。
           #コンテナ内のwebサーバにhttp://localhost:3306でアクセスできるようになる
      - "3306:3306"
    volumes: #データを永続化するためにある。
      - ./.data/db:/var/lib/mysql
    environment:
      MYSQL_USER: root #←ここがエラーの原因
      MYSQL_ROOT_PASSWORD: password
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
#pidはプロセスIDのこと。server.pidにpidが書かれているとサーバーが起動中と判断されてしまう。
    volumes:
      - .:/myapp
#dockerとローカルのディレクトリを同期するように設定。実行後、ローカルにも同様のファイルが生成される。
    ports:
      - "3000:3000"
    depends_on:
      - db  
#依存関係を示している。db→webへと起動する。

ここまで書いたらコマンドを実行

runコマンドではimageも構築から、コンテナの構築・起動までしてくれる。この時点で上記ファイルで書いた、.:/myappによりローカルに同様のファイルが生成される。

docker-compose run web rails new . --force --database=mysql --skip-bundle

コマンドを実行後はいろいろなファイルが作られたり、Gemfileが更新されているのでビルドする。
この時点でdatabase.ymlを書き換えておかなければならないところがある。

database.yml

default: &default
  ・
    ・
  username: root
  password: password ←ここにdocker-compose.ymlで指定したパスワードを入力
  host: db ←localhostからdocker-compose.ymlの最下で書いたdbを記入

ローカルのファイルを更新した時はbuildを忘れずに。

docker-compose build

その後にコンテナを起動する。

docker-compose up

するとエラーが出た

ActiveRecord::DatabaseConnectionError
There is an issue connecting with your hostname: db.
Please check your database configuration and ensure there is a valid connection to your database.

解決策
参考の動画の通りに、docker-compose.ymlのdbにMYSQL_USER: rootを記述していたが、rootは指定しなくても作られるらしいので、別のユーザー名を指定するか、いらないなら削除しておかなければならないらしい。
DockerでMysqlへのdb:createに失敗する

その後、別のエラーが出るが、それはデータベースがないというエラーなので作成する。

docker-compose run web rails db:create

再レンダリングすると、ローカルでrailsを開くことができる。

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