(まだ何も作ってないけど・・・)railsアプリをインターネット上に公開するにあたって、最初は無料で使える「heroku」というサービスがオススメとのこと。
試しにscaffoldでサクッと作成したrailsアプリのデプロイをしてみたところ、色々と引っかかったので、今後のために手順メモ。
# 環境はMacです
herokuにアカウント作成
とりあえずherokuに登録します。ここは画面に従ってすんなり。
続けて、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が必要
とりあえずのデプロイ手順は分かったので、ここまでで一旦おしまい。
ふぅ。。。
コメント