開発中のRailsアプリケーションを実験的に公開するにはHerokuを利用すると便利です。
インフラ構築などすることなくさくっと公開できてしまうからです。
HerokuはPaaSです。アプリケーションを稼働させるためのプラットフォームであり、DebianもしくはUbuntuがベースOSとなっています。ここでアプリケーションを作り込むことはできませんので、開発環境は別途必要となります。
ところで、ローカル環境でRailsアプリケーションを開発する場合、通常はMacやWindowsパソコンを使用すると思いますが、できれば本番環境と同じLinux環境を利用したいものです。
本番環境と同じ環境を構築するには、Vagrantなどの仮想環境を使用するのが定番なのではないかと思いますが、Windows 10 Spring Creators Update (Windows 10 1803) ではLinux環境が強化されていて、Microsoft Store から入手できるLinuxデュストリビューションが増えています。こちらもお勧めです。
ここでは開発環境はUbuntuを使用します。Microsoft Storeから入手するUbuntuは使える環境に進化しています。
大きく進化した点は、以前の「Bash on Windows」には無かったバックグランドプロセス(デーモン)の実行が可能になったことでしょう。開発環境としては申し分ない環境です。
前提条件
既にUbuntuにRails環境が構築されていて、アプリケーション開発中という前提で記事を記載したいと思います。
デプロイするには git が必要ですので、インストールしておきましょう。
Heroku サインアップ
Herokuを利用するにはこちらにアクセスして新規にアカウントを作成します。
Herokuの価格設定はこちらを参照してください。”明解で柔軟な価格設定”となっています。
実験的に公開するのであればFreeで始めて、必要に応じて上位プランへのスケールアップやスケールアウトが簡単にできます。
Freeの場合
認証済みアカウントで1ヶ月あたり1000時間のDyno時間を使えます。
DynoとはLinuxコンテナのことであり、課金の単位でもあります。Freeの場合、例えば24時間稼働のアプリであれば1ヶ月フル稼働一つ+もう一つ10日間稼働までです。とは言え30分間何も操作が行われなかった場合はスリープしてしまうなど、制限がある点に注意が必要です。有料の上位プランでも秒単位の課金となっていて、月額料金の中からDynoを起動した時間分だけが請求されますので、制限されたくない場合は上位プランへスケールアップしてもよいのではないでしょうか。
Ubuntu に Heroku CLI をインストール
ここではHerokuをコマンドで操作します。
Heroku CLI (Command Line Interface) を使用すると、Herokuアプリケーションのデプロイや管理が簡単にできますし、便利な機能が沢山揃っていますので、デプロイ作業の自動化も可能です。
Heroku CLI Download and install
それではUbuntuにHeroku CLI をインストールしましょう。
sudo curl https://cli-assets.heroku.com/install-ubuntu.sh | sh
heroku --version
heroku/7.0.25 linux-x64 node-v10.0.0
Heroku ログイン
サインアップ時に登録したメールアドレスとパスワードでログインします。
heroku login Email: you@example.com Password: xxxxxxxx
Logged in as you@example.com
Heroku デプロイ準備
デプロイしたいRailsアプリケーションのルートディレクトリに移動して、初期設定をします。
git config の登録も必要です。
cd /var/www/sample git init git config --global user.email "you@example.com" git config --global user.name "Your Name"
gitでpushする前にアセットのプリコンパイルをしておきます。
rake assets:precompile
Heroku のデータベースはPostgresです。Production環境でpgを使用するように設定します。また、Gemfileにはrubyのバージョンも指定しておきます。
vim Gemfile
.............................. ruby "2.5.1" .............................. group :development, :test do gem 'sqlite3' end group :production do gem 'pg' end
これも忘れずに
bundle install --without production
Railsアプリケーション全ファイルを追加してコミット
git add -A git commit -m "first"
Heroku デプロイ
heroku上にアプリを生成します。
heroku create
Creating app… done, ? xxxxxx-xxxxx-xxxxx
https://xxxxxx-xxxxx-xxxxx.herokuapp.com/ | https://git.heroku.com/xxxxxx-xxxxx-xxxxx.git
適当なアプリ名が付けられて生成されました。アプリの名前は後から変更できます。
プッシュして、DBマイグレーションを行います。
git push heroku master heroku run rake db:migrate
通常は config/database.yml にデータベース定義を設定しなければなりませんが、Herokuではデプロイ時にdatabase.ymlの自動生成が行われますので、自分で設定する必要はありません。
データベース定義を見たければ以下のコマンドで参照できます。
heroku pg:credentials:url
Connection info string:
“dbname=xxxxxxxxxxxxxx host=ec2-xx-xx-xxx-xxx.xxxxxxx-x.amazonaws.com port=5432 user=xxxxxxxxxxxxxx password=xxxxxxxx sslmode=require”
Connection URL:
postgres://xxxxxxxxxxxxxx:xxxxxxxx@ec2-xx-xx-xxx-xxx.xxxxxxx-x.amazonaws.com:5432/xxxxxxxxxxxxxx
アプリ生成時に適当な名前が付けられていましたので、アプリ名を変更します。
heroku rename casualapp
Renaming xxxxxx-xxxxx-xxxxx to casualapp… done
https://casualapp.herokuapp.com/ | https://git.heroku.com/casualapp.git
Git remote heroku updated
? Don’t forget to update git remotes for all other local checkouts of the app.
名前変更後のURLです。
それでは、作成したアプリを開いてみましょう。
https://casualapp.herokuapp.com/
Dyno使用料の確認はこのコマンドです。
heroku ps
Free dyno hours quota remaining this month: 547h 24m (99%)
Herokuのログを参照するときは、このコマンドです。
heroku logs -t
アプリを修正したときは、このコマンドで再度プッシュします。
git add . git commit -m "update" git push heroku master
アプリが不要になったときは、次のコマンドでHerokuからアプリを削除できます。
heroku apps:destroy --app アプリ名
ここまで、コマンドで操作してきましたが、Herokuのダッシュボード画面でもアプリ情報やデータベース情報などが参照できます。