目的
railsの勉強をしたい。
せっかくならこの世に放ちたいので、renderを使ってデプロイしようと思いました。
1年前に一度、パンの材料を投稿するwebアプリを作ったことがありますが、
ほとんど全部忘れているので備忘録としてQiitaも書きます。(可能な限り)
今回やること
今回の目標は以下の5つ。
- 新しい Rails のアプリケーションを作成
- GitHub を導入
- Rails のデータベース管理システムを PostgreSQL にする
- render でデプロイ
- 動作確認
環境
- windows 10
- VSCode 1.77.0
- ruby 3.0.4
- Rails 6.1.4.4
- SQLite 3.41.2
- PostgreSQL 15
いざ出陣
といっても、こちらのサイトを参照すれば基本的にはいけました。
実行したコマンドは以下。
( # はサイトを参照して手順に進めます。)
cd Desktop // フォルダを作成するディレクトリに移動
rails new アプリ名 // 任意のアプリ名で作成
cd アプリ名 // 作成したアプリに移動 (以降、同ディレクトリで作業)
git init // 自動で実行されるが一応初期化
git add -A // ステージエリアに全てのファイルを追加
git commit -m "first commit" // commit
git remote add origin http://Github.com/GitHubで作成したID/リポジトリ名.git
// リモートレポジトリの登録
git push -u origin master // Push
# Gemfile, database.yml の編集
bundle config set --local without 'production' // 後述
bundle lock --add-platform x86_64-linux // 後述
bundle install // ライブラリをインストール
# Railsアプリの作成
# Webサービスの作成/設定
# データベースの作成
# Railsアプリとデータベースの接続
サイトにあるようにリンクを開くと、以下のような画面になると思いますが、いったんこれでOKです。
後でページを作って動作確認をします。
気になったところ
気になったところがあったので以下にまとめます。
bundle config set --local without 'production' について
サイトでは
bundle install --without production
を実行するとありましたが、非推奨らしい。
--without
フラグは、インストール時に production グループの Gem をインストールしないようにしますが、 Bundler はこの設定を覚えないため、このコマンドはそれを覚えさせるためのものです。
これによって以降、単に bundle install
で良くなります。
bundle lock --add-platform x86_64-linux について
bundle lock --add-platform x86_64-linux
を実行しないままデプロイすると、
/opt/render/project/.gems/gems/bundler-2.2.33/lib/bundler/definition.rb:432:in `validate_platforms!': Your bundle only supports platforms ["x64-mingw32"] but your local platform is x86_64-linux. Add the current platform to the lockfile with `bundle lock --add-platform x86_64-linux` and try again. (Bundler::ProductionError)
とエラーになります。bundle は x64-mingw32
プラットフォームのみをサポートしており、ローカルプラットフォームが x86_64-linux
であることが原因のようです。このコマンドは、Gemfile.lock に x86_64-linux
プラットフォームを追加し、 Bundler にもこのプラットフォームをサポートする gem を含めるよう指示します。
正味、意味はあんまり分からないけど実行したら解決しました。
bundle lock --add-platform x86_64-linux // Gemfile.lock に "x86_64-linux" プラットフォームを追加
bundle install // ライブラリをインストール
動作確認
デプロイしたページが表示されるかを確認します。
データベースの作成
データベースは基本的にアプリケーションに1:1で結びついているため、データベースの作成は1度だけすれば問題ありません。
rails db:create // データベースの作成
rails db:migrate // マイグレーション
コントローラーの作成
以下のコマンドを実行してコントローラーを作成します。コントローラーの名前(ここでは tests )は任意ですが、複数形で付けることが命名規則になっています。
コントローラーが何かわからない人は、こちらのサイトを参照し、MVCモデルについて目を通すと良いと思います。
rails g controller tests # testsコントローラーを作成する
コントローラーにアクションを定義
app > controllers フォルダに入っているtest_controller.rbを以下のように編集します。
class TestsController < ApplicationController
def index
end
end
データベースへアクセスする際は、 def index
と end
の間にいろいろ書きますが、今回は省略します。
アクションに対応するビューを作成
app > views > tests フォルダに入っているindex.html.erbを作って、以下を記述します。
Hello World!
Hello World!
と表示するだけのコードです。
.erb
拡張子は、 HTML、XML、CSS、JavaScript などの静的なファイルの中に、 Ruby コードを埋め込んで動的にコンテンツを生成するために使用されます。
ルーティング
configフォルダにあるroutes.rbファイルを以下のように編集します。
Rails.application.routes.draw do
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
resources :tests
root 'tests#index'
end
resources :tests
は、標準的な8つのルーティングをまとめて定義するもので、このルーティングのみを使ってアプリケーションを作ることが推奨されています。
root 'tests#index'
は、 render のURLを踏んだ時にそのままページが表示されるように追加しました。
デプロイ
以下のコマンドで、 GitHub に変更を Push すると自動でデプロイが始まります。
git add -A // ステージエリアに全てのファイルを追加
git commit -m "first commit" // commit
git push -u origin master // Push
render から web ページの URL を開き、画面右上にhello world!
と表示されていれば OK です!
余談
Web Services on the free instance type are automatically spun down after 15 minutes of inactivity. When a new request for a free service comes in, Render spins it up again so it can process the request.
無料版の render では15分リクエストがないと、サーバーが閉じるため開くのに時間がかかります。
サイト作成がもうちょい進んだら、有料版にしようかな。