Railsをはじめる
https://docs.docker.com/samples/rails/ を参考に初めてみる。
Docker image は、 ruby:3.0.1-slim
としてみる。
rails も、 gem 'rails', '~>6'
としてみる。
単純な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
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
に変更してみる。
ERROR: Service 'web' failed to build : COPY failed: forbidden path outside the build context: ../compose ()
COPY ../compose /myapp
をコメントアウトしてみる。
rails new
が成功。
docker-compose build
を実行。成功。
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
のタグ?が無い。
そこまでこだわりがあるわけでもないので、やり直し。
改めて、 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周りが無いと思っていた)
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
のように、サービス名に変更して、再度実行。
上記のようにすると、rootディレクトリの下に hogehoge ディレクトリができてしまって、無駄に階層構造になってしまう。
myapp
を hogehoge
に全置換して、もとのコマンドを実行した。
docker-compose run --no-deps web rails new . --force --database=postgresql --api --minimal
成功。