herokuにrailsアプリをデプロイするまでの手順メモ

Ruby
スポンサーリンク

(まだ何も作ってないけど・・・)railsアプリをインターネット上に公開するにあたって、最初は無料で使える「heroku」というサービスがオススメとのこと。

試しにscaffoldでサクッと作成したrailsアプリのデプロイをしてみたところ、色々と引っかかったので、今後のために手順メモ。
# 環境はMacです

スポンサーリンク

herokuにアカウント作成

とりあえずherokuに登録します。ここは画面に従ってすんなり。

Heroku | Login
Log in to your Heroku account from this secure Heroku login page.

続けて、heroku上で[Create New App]からアプリケーションを作成(名前は適当に)

ローカル環境でアプリケーションを作成

ローカル環境でとりあえずのアプリを作成する。
*ここでRailsの開発には Aptana Studio というツールがオススメという記事を見かけてインストールするも、ツール上でターミナルが動かなくてrailsコマンドが実行できず四苦八苦。とりあえずツールは後回しにしてコマンドラインで作業を継続

$ rails new rails_test
$ rails s

ローカル環境で[localhost:3000]にアクセスしてページが表示されるのを確認。続けてデプロイ。(ここからが面倒でした・・・)

デプロイ手順

*冒頭に書いたAptana Studioが使えればGUIで簡単にデプロイできるっぽいけど、使えないのでコマンドラインでの手順メモ。

heroku-cliをインストール

$ brew install heroku/brew/heroku

herokuに接続

コマンド実行後にIDとPWを聞かれるので入力する。

$ heroku login

デプロイ

ローカル環境のアプリケーションディレクトリに移動してgitコマンドでデプロイ。

$ cd rails_test
$ git init
$ git add .
$ git commit -am “log”
$ git push heroku master

デプロイこける

ここまで実行したところでエラーが出て止まる。(エラーを見る限り、sqlite3が使えないらしい・・・)
色々と調べてみたところでは、railsで初期設定となっているsqlite3をherokuで使うのは大変っぽいので、herokuが用意してくれているPostgreSQLを使うことに。

PostgreSQLのインストール

$ brew install postgresql

データベースは既に作成されていたので、initdbは省略。(で良いハズ)

PostgreSQL起動のための設定

~/.bash_profileに以下の記述を追記
export PGDATA=/usr/local/var/postgres

起動

$ pg_ctl start

ちなみに停止は、「pg_ctl stop」

rails用のDBとユーザ作成

$ createuser rails_user
$ psql -q -c’select * from pg_user’ postgres

これで作成したユーザ名(rails_user)が表示されればOK。

$ createdb rails_dev -U rails_user
$ psql -l

これで作成したDB名(rails_dev)が表示されればOK。

$ psql rails_dev
# ALTER ROLE rails_user WITH Superuser;
# \du

これでユーザrails_userにSuperuser権限が付いていればOK。

railsアプリのDB設定変更

railsアプリケーションがデフォルト設定のsqlite3を使う設定になっているので、PostgreSQLを使うよう修正。(今思えば、作り直した方が早かったかも・・・)
修正対象となるファイルは、Gemfile と config/databese.yaml の2ファイル。
◆Gemfile

gem ‘sqlite3’

get ‘pg’

◆config/database.yaml

adaptor: sqlite3

adaptor: postgresql
database: db/development.sqlite3

database: rails_dev
username: rails_user // これはPostgreSQL用に追記

デプロイ再び

ここまで出来たら再度デプロイ。

$ git add .
$ git commit -am “sqlite to postgresql”
$ git push heroku master

ズラズラっとログが流れていって、デプロイ完了。

動作確認

Webブラウザからheroku上のアプリケーションにアクセス[https://<アプリ名>.herokuapp.com/]。(画面右上の「Open app」ボタンをクリック)
すると、なんとエラー。「The page you were looking for doesn’t exist.」ページが無いよ、と。

エラーの対処

ログを見ると、「/ へのルーティングが無い」と言われているっぽい。う〜ん、ローカルでは見えてたけどなぁ、とは思いつつ、さすがにアプリの手を抜きすぎた感もあるので、ルーティングを追加して再度デプロイ。すると成功。

herokuのDB動作確認

ここまで出来たので、データベースを使えるかを確認。
とりあえずローカル環境にてscaffoldでサクッと作成。

$ rails g controller scaffold member name:string age:integer mail:string memo:text
$ rails db:migrate

ローカル環境では正常にデータの登録・更新・削除ができることを確認。
再度デプロイして、Webブラウザからheroku上のアプリケーションにアクセスすると、またもやエラー。(今度はHTTP500エラー)

エラーの対処(再び)

ログを見てもHTTP 500 としか出てない。heroku上のデータベースを見ると、テーブルが出来てない模様。

テーブル作るにしても、コマンドの実行方法が分からず、、、ということで画面をウロウロと探しまわったところ、画面右上の「More」ボタンの中に「Run console」を発見。試しにここから「rails db:migrate」を実行してみる。
何やらコマンドが動いてテーブルが作成されたっぽいので、再度Webブラウザからアプリケーションにアクセスすると、動いてる!

まとめ

herokuにrailsアプリをデプロイする際に気をつける点は下記2点といったところです。

  • PostgreSQLを使う(SQLite3は使えない、と思った方が良い)
  • アプリケーションデプロイ後にherokuのコンソールでmigrationが必要

とりあえずのデプロイ手順は分かったので、ここまでで一旦おしまい。
ふぅ。。。

コメント