一週間のカリキュラム 1週間で、Ruby 〜 Ruby on Railsまでを学ぶ
シリーズの5日目、herokuを利用したサービスのデプロイを追っていきます。。
5日目
- サービスのデプロイ
サービスのデプロイ
ローカル環境で今までアプリケーションを動かしていましたが、今回はHerokuの無料プランを使ってウェブ上にサービスを公開したいと思います。
Heroku アカウント作成、ログイン
Heroku: クラウド・アプリケーション・プラットフォーム
アカウントの登録を行ってください。
Heroku CLI
アカウントの登録後、heorku cliを、自身のPCにインストールします。
今回は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世代となってます。