railsのherokuへの展開でつまずいた話

Ruby on Rails チュートリアル:実例を使って Rails を学ぼうRailsの勉強をしていてつまずいたところがあったので、そこだけまとめ。

railsをherokuに展開する

チュートリアル2章のデモアプリケーション作成時には、Localで構築環境をherokuへ展開する時に以下のコマンドで展開します。

参照: 2.3.5デモアプリケーションのデプロイ

$ heroku create
$ git push heroku master

# データベースを動作させる場合はこれも必要
$ heroku run rake db:migrate

(ralsの構築、herokuへの展開の詳しい手順は、チュートリアルheroku展開の手順を参照)

■問題
展開時に通知されたURLにウェブブラウザでアクセスしてみると、
「The page you were looking for doesn't exist.」
のページが表示されてしまいます。これに大分はまった。。
f:id:saj_kz:20140406230620p:plain

■解決策
いろいろと調べたところ、以下のサイトの質問者の方と同じ状況でした。
railsアップをproduction serverでデプロイしたら、 ActionController::RoutingError (No route matches [GET] "/"): - QA@IT

抜粋してみるとこんな流れです。

publicフォルダにindex.htmlを置いたら、エラーでなくなりました。これが正しいのかって感じですが。。。

コメントを見る限り、特にルートを処理するコントローラを作ったわけではないように見受けられます。
だとすれば、productionではそのようになります。

中略

public にindex.html を置くのは間違いではないんですが、最終的には / を解決するコントローラを置くことになると思います。

「herokuのURL/users」等、rails側で作成できているアクションに関しては、ページが作成されており、エラーも表示されませんでした。

ここまで読んだところによると、

  • 「/」 を解決するコントローラを作成する
  • public に index.html を置く

のどちらかで解決できそうです。
今回はindex.html を作成して、作成できているページへのリンクを張り付ける形式にしました。

イメージ図
f:id:saj_kz:20140406232326p:plain


これでherokuデプロイ時に発行されるURLにはindex.htmlが表示されます。