🍄

【Docker+Rails】Railsのトップページを表示させるまで

2024/01/22に公開

ドキュメントルートにindex.phpを置けば表示されちゃうPHPに比べると、Railsを触り始めたころはとにかく「なんか表示される」までの道のりがつらかった記憶がありますが、最近はようやく慣れてきて、Docker環境をこしらえてRailsをインストールしてブラウザでトップ画面にアクセスするまでほぼ迷わなくなったので、手順を残しておこうと思います。

https://zenn.dev/lothair/articles/17438f4a8089d0
こちらで公開した手順で作成したDocker環境でRailsアプリケーションを立ち上げます。
sample_appという名前のアプリケーションを作成しhttps://local-sample-app.netにアクセスしてRailsのトップ画面を表示させるまでです。

↑の手順通りにやると、sample_appというディレクトリとwebコンテナの/appというディレクトリがマウントされており、webコンテナに接続すると/appにいるようになっています。
以下はwebコンテナに接続し、/appにいる状態からの手順です。
(sample_appとのマウントがうまくいっていれば、ここに空のGemfileとGemfile.lockがあるはず)

(dockerを利用していない場合でもRailsアプリケーションを作成したいサーバー上のGemfileのあるディレクトリで同じことをすればいいはずです)

手順

  1. Railsをインストールする。最新の7.1.2を入れてみます。
$ gem install rails -v 7.1.2
  1. rails newする(カレントディレクトリに作成)
$ rails new . -d mysql -T -a propshaft

オプションについてはここでは詳しくは触れませんが、以下の通りです。
-d mysql DBにMySQLを指定
-T テストスキップ(テストフレームワークはrspecがメジャーなため、デフォルトのminitestはスキップすることが多い)
-a アセットパイプラインにPropshaftを指定。Rails7から増えたオプションらしいです。

  1. 環境変数を設定
    DBのパスワードはcredentialsで管理します。
$ EDITOR=vim rails credentials:edit --environment=development

ローカル環境でとりあえず表示させたいので、ユーザーもパスワードもrootです。

db:
  password: root
  1. database.ymlを編集する
    パスワードは前の手順で設定した環境変数を読み込むようにします。今回dockerを使っているのでホストはdbコンテナを指定します。docker等を利用せずすべて同じサーバー上にあるならlocalhostでよいです。
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  password: <%= Rails.application.credentials.dig(:db, :password) %>
  database: sample_app

development:
  host: db
  username: root
  <<: *default
  1. DBを作成
    前の手順で設定した名前のDB(sample_app)が作成されます。先にdockerのDBを作っていた場合はその名前にすればよく、次の手順が不要です。
$ rails db:create
  1. config/environments/development.rbを編集する
require "active_support/core_ext/integer/time"

Rails.application.configure do
  # 省略
  
  config.hosts << Rails.application.credentials.dig(:host)
end
  1. サーバーを立ち上げてみる。
$ rails s -b '0.0.0.0'

これでブラウザでhttps://local-sample-app.netにアクセスすればRailsのトップ画面が表示されるはず(dockerでリバースプロキシを利用してないならhttp://localhost:3000など)。

  1. おまけ
    最初に貼った記事の通りにdocker環境を作成している場合は、ここでいったんDockerコンテナを落とし、docker-compose.ymlのwebコンテナのcommandの行のコメントアウトを戻すと、docker-compose upでRailsサーバー立ち上げのコマンドが実行されるようになります。

Discussion