はじめに
Railsでscaffoldで作成した簡易アプリを、Herokuにデプロイして、外部から利用できるようにするまでの一連の流れをまとめてみた。
環境
ruby 2.5.1p57
Rails 5.2.4.1
Ubuntu 16.04.5 LTS
Windows10
Vagrant
手順
Herokuでは、sqlite3が利用できず、PostgreSQLしか対応していないため、データベースは、必ず、PostgreSQLを指定してプロジェクトを作成します。
sqlite3のまま、Herokuにデプロイしようとするとコケるようです。
$rails new myapp -d postgresql
$cd myapp
Gemfileを開いて、gem 'pg'が記述されている事を確認する。
gem 'pg', '>= 0.18', '< 2.0'
補足
rails new時に、postgresqlを指定したため、Gemfileに、gem pgが、デフォルトで付いてくる事になります。rails new時に、postgresqlを指定しなかった場合、Gemfileでgem pgを追加して、gem sqlite3を削除して、bundle installをする事になります。因みに、gem pgはproductionに追加しないと、Herokuで動作できないので注意。ググると、Gemfileにgem rails_12factorも追加するように指示している情報もあるが、どうやら、古いバージョンのRailsの場合に必要だったようで、自分のバージョンでは不要との事。
下記の記述がデフォルトである筈なので、これが、rails_12factorの代用をしているようです。
# Use a different logger for distributed setups.
# require 'syslog/logger'
# config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
if ENV["RAILS_LOG_TO_STDOUT"].present?
logger = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
end
database.ymlを開いて、Herokuの本番環境用の設定を記述する。環境変数名は、Herokuが自動で用意してくれます。development用の設定は環境に合わせて個別に設定する必要があります。
production:
url: <%= ENV['DATABASE_URL'] %>
scaffoldを作成する。
$rails g scaffold List name:string age:integer
データベースを作成した後、テーブルを作成する。
$rails db:create
$rails db:migrate
この段階でローカル環境でscaffoldが動く事を確認する。
$rails s -b 192.168.33.10 -p 3000
補足
rails newした時点で、git initも内部で走っているのだが、お約束としてやっておく。
$git init
$git add .
$git commit -m 'first commit'
Herokuにログインする。ログインアカウントを聞いてくるので入力する。
(※heroku loginコマンドを利用するには、事前に、Heroku CLI(Toolbelt)をインストールしておく必要があります)
$heroku login --interactive
Heroku上にアプリケーション名(リモートリポジトリ)を新規作成します。
$heroku create
git remoteに上記で作成したアプリケーション名を追加しなくても、自動で登録される事になります。念のために確認
git remote -v
ローカル環境から、Herokuのリモートリポジトリにpushします。この時、必ず、heroku createしてから、pushする事。
$git push heroku master
Heroku上に、PostgreSQLのDBを作成します。
$heroku run rails db:migrate
URLを確認して、ブラウザから表示します。
$heroku open
Manually visit https://polar-brook-18695.herokuapp.com/ in your browser.のように、作成されたURLが表示されるので、URLの最後に、アプリ名「lists」を付けて、ブラウザから表示してみる。
表示されました! 登録もOK。ちゃんと動いています。
ログアウトして終了です。
heroku logout