QA@IT

railsアップをproduction serverでデプロイしたら、 ActionController::RoutingError (No route matches [GET] "/"):

7884 PV

お世話になります

rails appをherokuでデプロイしようとしてます
deployしたら、

The page you were looking for doesn't exist.

って出て、ググったら、
こんなの出てきたので、
http://qiita.com/seltzer/items/d52a31c558a30c857a3f

何だ、楽勝じゃん!って思ってたのですが、結局うまく行かず。。。

ローカルでプロダクションserverで動かしてみたのですが
変わらず、、、

ログには
ActionController::RoutingError (No route matches [GET] "/"):

ドキュメントルート上のエラー??
果たしてどこを見たらいいのやら。。。という感じなのですが。。。

どなたかわかる方居ますでしょうか

よろしくおねがいいたします

  • heroku run rake assets:precompile してみても変わらずですか? -
  • git heroku push masterのあとですよね??ダメでした。。。 -
  • publicフォルダにindex.htmlを置いたら、エラーでなくなりました。これが正しいのかって感じですが。。。 -

回答

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

一番手っ取り早いのはローカル環境でproductionで動かしてみればいいんですが、
postgresがインストールされていないと設定変えないと動かないかもしれません(DB使ってなければ動くと思います)。
動かない場合は別のディレクトリで新しいアプリケーションで試してみてください。

rails s -e production

とすると、production環境モードで実行できます。
これで localhost:3000 にアクセスしたときと同じように表示されるのであれば問題ありません。
お気づきかもしれませんが、ここで表示されているのはpublicの404.htmlです。


rails 4より前は public/index.html (Welcomeページ)が自動的に生成されていました。
このため、最終的にこのファイルを削除するとか、rails new で --skip-index-html 付きで実行してindex.htmlが作成されないようにする必要がありました。

rails 4ではその手間を省くため(だと思います)、Welcomeページは developmentの場合にrails/welcome#indexを呼ぶような処理に変更されています。
https://github.com/rails/rails/blob/master/railties/lib/rails/application/finisher.rb#L22

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

編集 履歴 (1)
  • ご丁寧にありがとうございます。
    確実な正解ではないだろうと思ってました

    回答を見させていただいて、理解が深まりました。
    ありがとうございます!
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。