零からの

ゆるーく綴るブログ

Ruby on Jets チュートリアル(CRUDの作成)

Ruby on Jets デモプロジェクト作成後、 http://localhost:8888 に表示される手順に沿ってpostsのCRUDを作成する。

jets generate scaffold post title:string
jets db:create db:migrate
jets server
open http://localhost:8888/posts
jets help

MySQLコンテナの作成

MySQLを使用するためdocker-compose.ymlを修正する。

Ruby on Jetsのプロジェクトを作成した際に.env.developmentファイルが作成されるのでそれを読み込むようにする。

version: '3'
services:
  app:
    build:
      context: .
      dockerfile: ./docker/ruby/Dockerfile
    volumes:
      - .:/app
      - bundle-data:/usr/local/bundle
    ports:
      - "8888:8888"
    depends_on:
      - db
    command: bundle exec jets server --port 8888 --host 0.0.0.0
  db:
    image: mysql:5.7
    ports:
      - "3306:3306"
    env_file:
      - .env.development
volumes:
  bundle-data:
    driver: local

.env.developmentに以下を追加する。

MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_DATABASE=jets_db
MYSQL_USER=jets_user
MYSQL_PASSWORD=jets_password
DB_HOST=db # docker-composeで定義したサービス名

config/database.ymlを修正する(database, username, password)。

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV["DB_POOL"] || 5  %>
  database: <%= ENV['MYSQL_DATABASE'] || 'app_development' %>
  username: <%= ENV['MYSQL_USER'] || 'root' %>
  password: <%= ENV['MYSQL_PASSWORD'] %>
  host: <%= ENV["DB_HOST"] %>
  url: <%= ENV['DATABASE_URL'] %> # takes higher precedence than other settings
  reconnect: true

development:
  <<: *default
  database: <%= ENV['MYSQL_DATABASE'] || 'app_development' %>

test:
  <<: *default
  database: app_test

production:
  <<: *default
  database: app_production
  url: <%= ENV['DATABASE_URL'] %>

Jets generate and migrate

あとは一番上の手順を参考にコマンドを実行し、http://localhost:8888/posts にアクセスする。

docker-compose run --rm app bundle exec jets generate scaffold post title:string
docker-compose run --rm app bundle exec jets db:migrate # MySQLコンテナ作成時にdatabaseも作成するため、db:createは不要
docker-compose up
open http://localhost:8888/posts
docker-compose exec app bundle exec jets help # コマンド一覧

以下の画面が表示される。

f:id:kzp:20200123001634p:plain
Posts