railsのherokuへの展開でつまずいた話
Ruby on Rails チュートリアル:実例を使って Rails を学ぼう でRailsの勉強をしていてつまずいたところがあったので、そこだけまとめ。
railsをherokuに展開する
チュートリアル2章のデモアプリケーション作成時には、Localで構築環境をherokuへ展開する時に以下のコマンドで展開します。
$ heroku create $ git push heroku master # データベースを動作させる場合はこれも必要 $ heroku run rake db:migrate
(ralsの構築、herokuへの展開の詳しい手順は、チュートリアルのheroku展開の手順を参照)
■問題
展開時に通知されたURLにウェブブラウザでアクセスしてみると、
「The page you were looking for doesn't exist.」
のページが表示されてしまいます。これに大分はまった。。
■解決策
いろいろと調べたところ、以下のサイトの質問者の方と同じ状況でした。
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 を作成して、作成できているページへのリンクを張り付ける形式にしました。
イメージ図
これでherokuデプロイ時に発行されるURLにはindex.htmlが表示されます。