FullStackEngineer 2022年2月26日更新

RailsアプリをHerokuへデプロイする

Index

一週間のカリキュラム 1週間で、Ruby 〜 Ruby on Railsまでを学ぶ

シリーズの5日目、herokuを利用したサービスのデプロイを追っていきます。。

5日目


サービスのデプロイ

ローカル環境で今までアプリケーションを動かしていましたが、今回はHerokuの無料プランを使ってウェブ上にサービスを公開したいと思います。

Heroku アカウント作成、ログイン

Heroku: クラウド・アプリケーション・プラットフォーム

アカウントの登録を行ってください。

Heroku CLI

アカウントの登録後、heorku cliを、自身のPCにインストールします。

heroku cliのインストール

今回はmacでインストールした場合を追っていきます。

$ brew tap heroku/brew && brew install heroku
....省略
  Use our standalone setup:
    1) Run and follow the install steps:
      $ heroku autocomplete

インストール後のアカウントの認証などを autocomplete コマンドで自動設定できます。

$ heroku autocomplete

途中で
...エンターでブラウザでログイン認証にいきます。

===
Setup Instructions for HEROKU CLI Autocomplete ---

1) Add the autocomplete env var to your bash profile and source it
$ printf "$(heroku autocomplete:script bash)" >> ~/.bashrc; source ~/.bashrc

NOTE: If your terminal starts as a login shell you may need to print the init script into ~/.bash_profile or ~/.profile.

2) Test it out, e.g.:
$ heroku <TAB><TAB>                 # Command completion
$ heroku apps:info --<TAB><TAB>     # Flag completion
$ heroku apps:info --app=<TAB><TAB> # Flag option completion

Visit the autocomplete Dev Center doc at https://devcenter.heroku.com/articles/heroku-cli-autocomplete

Enjoy!

※ ブラウザでのログイン認証以外の方法もあります。

Herokuと今までのローカル環境の違いを埋める。

Heroku上でDBをpostgresを使います。 ローカル環境上は今まで通りsqlite3でも良いですが、一応ローカルにも postgressを入れてみましょう。

ローカル環境でPostgresインストール

$ brew install postgresql

$ brew services start postgresql

$ brew services list

エラーが出る場合

ローカル環境で試しにDBを作成していく。(飛ばしてもOK)

DBの雰囲気を掴む為に,ローカルのpostgres自体にログインして一応DBを作成しますが、こちらの操作自体はしなくもて問題ありません。

後ほど、rakeコマンドで定義したDBを作成できます。


ログイン $ psql postgres psql (14.2) Type "help" for help. postgres=#

例えば、App_devを作成する場合

postgres=# create database App_dev

\q 入力でexit

先程のDBができてる事を確認

$ psql l

現行のプロジェクトをsqlite3からPostgresに変更する。

インストールしたpostgresをRailsプロジェクトで利用します。

Gemfileの書き換え

# gem 'sqlite3' これをコメントアウトしてpgをプラス
gem 'pg'

bundle installを忘れずに。

環境毎に pg,sqlite3を切り替えて使う事も出来ます。

DB設定用ymlファイルの書き換え

herokuを想定した書き換えを行ってます。

config/database.yml


# SQLite. Versions 3.8.0 and up are supported. # gem install sqlite3 # # Ensure the SQLite 3 gem is defined in your Gemfile # gem "sqlite3" # default: &default # adapter: sqlite3 adapter: postgresql # <new pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 encoding: unicode # <new development: <<: *default # database: db/development.sqlite3 database: App_dev # <new # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default # database: db/test.sqlite3 database: App_test # <new production: <<: *default # database: db/production.sqlite3 url: <%= ENV['DATABASE_URL'] %> # <new Herokuで利用

ローカルでDBの切り替え

リセットからSEEDまで行う。

$ rake db:reset

作成確認

railsコマンドでDBに接続
$ bin/rails dbconsole

postgresですでにDBを選択した状態になってるので下記コマンドでテーブル確認
$ \d

細かなpostgresのコマンドについては 参照

rails serverを立ち上げて、無事動いてるか確認してみましょう。

これでHerokuへの準備ができました。

Git

今まで作成したプロジェクトをGit管理してない場合はgit管理できるようにしましょう。


git init git add . git commit -m "first"

この時点ではリモートを追加しなくて問題ありません。

herokuへ、アプリを登録

Rails アプリが含まれるディレクトリにいることを確認してから、Heroku でアプリを作成します。

$ heroku create
※アプリ名を指定する事も可能です。
heroku create アプリ名

herokuの文字が入ったリモートが追加されてるか確認
$ cat .git/gitcofig

GemをHerokuに対応させる。

Gemfile.lockに x86_64-linux を追加する。

```Gemfile.lock PLATFORMS x86_64-darwin-21 x86_64-linux


## buildpackの作成 heroku上でruby,nodejsが動くように設定する物です。

作成 $ heroku buildpacks:add --index 1 heroku/nodejs $ heroku buildpacks:add --index 2 heroku/ruby

作成できたか確認 $ heroku buildpacks === **appname******* Buildpack URLs 1. heroku/nodejs 2. heroku/ruby


heroku本番へPUSH

$ git push heroku main



[※参考 Rails7 日本語](https://devcenter.heroku.com/ja/articles/getting-started-with-rails7#add-the-pg-gem) ## heroku postgresを add-oneとして登録 [参考 heroku postgres](https://devcenter.heroku.com/ja/articles/heroku-postgresql#provisioning-heroku-postgres) ```sh 今入ってるaddonsを確認 $ heroku addons 無料プラン名を指定して(hobby-dev) postgres addonsを追加  $ heroku addons:create heroku-postgresql:hobby-dev この時点で環境変数にDATABASE_URLが設定されます。 ※ 先にdatabase.ymlに url: <%= ENV['DATABASE_URL'] %> # <new Herokuで利用 が追加してあったので、これだけでDB接続の準備は完了 環境変数を確認してみると、データベースのURLが確認出来ます。 $ heroku config さらに、今までのローカルの.ENVにあった環境変数をherokuにも追加 BLOG_NAME='ブログタイトルです' $ heroku config:set BLOG_NAME='ブログタイトルです' 消す場合は config:unset 変数名で 環境変数自体はherokuの管理画面からも確認、変更は出来ます。

DBのマイグレーション

アプリ名を指定してdbのマイグレーションとseedをします。

アプリ名は heroku configとした時に
=== [アプリ名] Config Vars
↑と出るので、そこを参考にするか、heroku管理画面から確認してください。

$ heroku run rake db:migrate -a アプリ名

$ heroku run rake db:seed -a アプリ名

appnameの指定が面倒くさい、省略したい場合はこちらを参考に

なお、heroku上に作成したpostgresデータに関してはリセットはコマンドから行わずに、heroku addons画面から入って、reset します。

dynoの再起動

$ heroku ps:restart

アプリを開く
$ heroku open

その他 herokuコマンド

ログ確認

heroku側で実行してる場合に出てくる問題を割り出すのにlogsコマンドがあります。

リアルタイムでモニタリング
$ heroku logs --tail -a アプリ名

今までのログを表示
$ heroku logs

※ heroku管理画面からの確認が出来ます。

Procfileで、デプロイ時にDBの変更をマイグレーションで知らせる。

開発しながら変更したDB構成をデプロイ時に自動反映させます。

Procfileという物を作成して中に

web: bin/rails server -p $PORT -e $RAILS_ENV
release: rails db:migrate

https://www.karakaram.com/publishing-rails-application-on-heroku/#create-postgresql

データのバックアップについて

手動バックアップの保持できる世代数は無料のHobby-Devであれば2世代となってます。

最新記事一覧

続きを見る

関連コンテンツ

カテゴリー一覧

TOP フルスタックエンジニアを目指すに方々へ 2022年3月12日 Deviseのbootstrap5 対応