Closed9

Railsをはじめる

noboru_inoboru_i

単純なAPIサーバとしたいので、 rails new のパラメータを変更してみる。( mysql にするのは、多少なれているので)
docker-compose run --no-deps web rails new . --force --database=mysql --minimal

合わせて、 docker-compose.yaml も変更しておく。

version: "3.9"
services:
  db:
    image: mysql
    volumes:
      - ./tmp/db:/var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: example
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
noboru_inoboru_i
An error occurred while installing racc (1.5.2), and Bundler cannot continue.
Make sure that `gem install racc -v '1.5.2' --source 'https://rubygems.org/'`
succeeds before bundling.

In Gemfile:
  rails was resolved to 6.1.3.2, which depends on
    actioncable was resolved to 6.1.3.2, which depends on
      actionpack was resolved to 6.1.3.2, which depends on
        actionview was resolved to 6.1.3.2, which depends on
          rails-dom-testing was resolved to 2.0.3, which depends on
            nokogiri was resolved to 1.11.7, which depends on
              racc

racc がインストールできなかった。
Docker image を ruby:3.0.1 に変更してみる。

noboru_inoboru_i
ERROR: Service 'web' failed to build : COPY failed: forbidden path outside the build context: ../compose ()

COPY ../compose /myapp をコメントアウトしてみる。

rails new が成功。

noboru_inoboru_i

config/database.yml を以下のように変更。(passwordの反映)

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  host: localhost

docker-compose up を実行。

ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries

https://hub.docker.com/_/mysql をみると、たしかに ARM 64 のタグ?が無い。
そこまでこだわりがあるわけでもないので、やり直し。

noboru_inoboru_i

改めて、 https://docs.docker.com/samples/rails/ を参考に初めてみる。
Docker image は、 ruby:3.0.1 としてみる。
rails も、 gem 'rails', '~>6' としてみる。

docker-compose run --no-deps web rails new . --force --database=postgresql --minimal
成功。

docker-compose build は、やはり失敗するので、 COPY ../compose /myapp をコメントアウト。
成功。

config/database.yml を、以下のように変更。

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

docker-compose up を実行。成功。

docker-compose run web rake db:create を実行。成功。

ブラウザにて、 http://localhost:3000 にアクセス。 "Yay! You’re on Rails!" が表示される。成功?
--minimal を指定していたので、html周りが無いと思っていた)

noboru_inoboru_i

APIにするなら、 --api もつけたほうが良さそう。
結局、 rails new を実行することに。
docker-compose run --no-deps web rails new . --force --database=postgresql --api --minimal

ただ、 rails new . にすると、DB名などが myapp_development になることに気づく。
rails new hogehoge のように、サービス名に変更して、再度実行。

noboru_inoboru_i

上記のようにすると、rootディレクトリの下に hogehoge ディレクトリができてしまって、無駄に階層構造になってしまう。
myapphogehoge に全置換して、もとのコマンドを実行した。
docker-compose run --no-deps web rails new . --force --database=postgresql --api --minimal
成功。

このスクラップは2021/06/12にクローズされました