テスト用のアプリを作成したりデプロイしたりする度に、手順を忘れてメモを見返したり、
ついうっかりコマンドを実行し忘れてしまうことが多々ある今日この頃w
今後また1からアプリを立ち上げてデプロイする時のためにも、一連の流れをブログとして書き残しておこう!
ということで本記事を書くことにしました。
開発環境
- Ruby 3.1.2
- Ruby on Rails 7.0.3
- M1 Macbook Air 2020
- mac OS Monterey (ver. 12.4)
- ターミナル bash (Rosetta 2 使用)
アプリを作成する
今回はデプロイまでの一連の流れを見るだけなので、作成するアプリはワンクリック、ならぬワンコマンドでできる至って簡単なものとします。
まずは、$ rails new
でアプリを作成します。
アプリを作成したら、作成したアプリのディレクトリに移動しておきましょう。
$ rails scafford でアプリの雛形を作る
アプリのディレクトリ内で下記コマンドを実行し、アプリの雛形とデータベースを作成します。
$ rails g scaffold Post title:string body:text
$ rails db:create
$ rails db:migrate
$ rails s
でサーバーを立ち上げ、”http://localhost:3000/posts/new“に接続すると、すでにpostsの投稿用の雛形ができています。
とりあえず、何も装飾せずにこのままデプロイしていきます。
ルーティングを設定する
このままルートURL(http://localhost:3000)に接続するとRailsのスタートアップ画面が表示されてしまうので、
config/routes.rb
にルートURLに表示したいページを設定しておきます。
root "posts#index" #この行を追加
resources :posts
本番環境のデータベース設定を行う
Railsのデータベースはデフォルトで”sqlite3″になっているので、Gemfile
を以下のように書き換えておきます。
group :development, :test do
#上の方に書いてある"sqlite3"を消して、ここに記述する
gem "sqlite3", "~> 1.4"
gem "debug", platforms: %i[ mri mingw x64_mingw ]
end
#-------追加---------
group :production do
gem "pg"
end
#-------------------
Gemfileを変更したら、以下のコマンドを実行しておきます。
$ bundle install --without production
続いて、config/database.yml
のproduction:
の箇所を以下のように変更しておきます。
production:
<<: *default
adapter: postgresql
encoding: unicode
pool: 5
本番環境のWebサーバーの設定を行なう
本番環境(Heroku)ではWebサーバーにPumaを利用したいので、config/puma.rb
に下記の内容を記述しておきます。
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)
threads threads_count, threads_count
preload_app!
rackup DefaultRackup
port ENV['PORT'] || 3000
environment ENV['RACK_ENV'] || 'development'
on_worker_boot do
# Worker specific setup for Rails 4.1+
# See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot
ActiveRecord::Base.establish_connection
end
さらに、アプリのディレクトリ直下にProcfile
ファイルを新規作成し、下記の内容を記述しておきます。
web: bundle exec puma -C config/puma.rb
WebサーバーにPumaを利用する理由は以下の記事にて述べています。
設定は以上です。
GitおよびGitHubの登録とリポジトリの作成
まずはGitの登録とGit Hubのアカウント作成を済ませましょう。
各登録方法は以下の記事がとても参考になります。
登録を終えたらリポジトリの作成といきましょう。
ローカルリポジトリの作成
アプリのディレクトリ内で下記コマンドを実行し、ローカルリポジトリを作成します。
$ git init
続いて、ファイルをインデックスに追加します。
$ git add .
インデックスの内容をローカルリポジトリにコミットします。
$ git commit -m "コミットメッセージ"
続いてはリモートリポジトリの作成といきましょう。
リモートリポジトリの作成
GitHubにログインし、トップページにある「Create a new repository」ボタンからリモートリポジトリを作成します。
(画面右上の「+」アイコンメニューの『New repository』からも作成できます)
リポジトリを作成すると以下の画面が表示されます。
表示されたリモートリポジトリのURLをコピーしておき、以下のコマンドを実行してリモートリポジトリとローカルリポジトリを接続します。
$ git remote add origin リモートリポジトリのURL
ローカルにリモートリポジトリが追加されているかどうかは以下のコマンドで確認できます。
$ git remote -v
リモートリポジトリの接続が完了したら、以下のコマンドを実行してリモートリポジトリにコードをプッシュしておきましょう。
$ git branch -M main
$ git push -u origin main # 2回目からは(-u origin main)の部分は不要
Herokuへデプロイする
まずはHerokuのアカウントを作成しておきます。
また、Herokuアプリをターミナル上から作成、管理するために、Heroku CLIを開発環境にインストールしておきます。
$ heroku --version
でHerokuのバージョンが表示されたらインストール成功です。
Herokuにログインしてアプリを作成する
続いて、Herokuにデプロイしたいアプリのディレクトリに移動し、Herokuにログインします。
$ heroku login
上記のコマンドを入力すると、Webブラウザが立ち上がりHerokuログイン用のボタンが表示されるので、「Log in」ボタンを押してログインします。
続いて、以下のコマンドでheroku上にアプリを作成します(現時点ではまだ空のアプリ)。
$ heroku create 好きなアプリ名
createの後に好きなアプリ名を指定することができます。
ただ、heroku上でアプリ名を指定する場合、メールアドレスのように唯一無二のユニークな名前である必要があります。
もし、他で使われている名前だった場合は、
$ heroku create sample-app
Creating ⬢ sample-app... !
▸ Name sample-app is already taken
といった表示が出ます。
$ heroku create
のみを実行した場合、アプリ名はランダムに決められます。
ちなみに、アプリ名を後から変更する場合は、
$ heroku rename 変更後のアプリ名
と入力すれば変更できます。
適切なプラットフォームを追加する(macOS で Linux 環境を使用している場合など)
M1 Macで、Rosetta2使用のターミナルを用いてデプロイしようとするとエラーが出てデプロイできないことがあります。
【Rails】Bundler 2.2.x以降は開発者が適切なプラットフォームを追加する必要がある
そのため、僕のようにM1 MacでRosetta2利用の場合は、デプロイする前に以下のコマンドを実行して適切なプラットフォームを追加しておきましょう。
(できれば、Gitでコミットする前に実行しておきたい)
$ bundle lock --add-platform x86_64-linux
Gitに変更をコミットしていない場合はコミットしておく
内容に変更があった場合、その都度Gitに変更をコミットする必要があります。
コミットがまだの場合は、デプロイ前に済ませておきましょう。
$ git add .
$ git commit -m "コミットメッセージ"
デプロイする
いよいよデプロイのお時間です。
下記コマンドを実行し、アプリをHerokuにデプロイしましょう。
$ git push heroku main
何もエラーが出なければデプロイ成功です。
デプロイが終わったら、以下のコマンドを実行しHerokuアプリのデータベースを作成します。
$ heroku run rails db:migrate
これでアプリが使える状態になりました。
最後に、以下のコマンドでデプロイしたアプリを開いてみましょう。
$ heroku open
ローカルの開発環境と同様に動作すれば成功です。
ちなみに、Heroku上のデータベースでRailsのコンソールを使いたい場合は、
$ heroku run rails console
と入力すればコンソールが起動します。
デプロイしたアプリを更新する場合
Gitにコミットしてからデプロイします。
$ git add ファイル名
$ git commit -m "コミットメッセージ"
$ git push heroku main
データベースのテーブルなどを変更した場合は、マイグレーションも忘れずに行いましょう。
$ heroku run rails db:migrate
以上です。
コメント