初めてのHerokuデプロイでハマった(rails)
ruby on rails tutorialで作成したWebアプリをHerokuにデプロイしたら、
むちゃくちゃハマったのでメモ。
Herokuでpstgresqlを使うための変更
Gemfileの編集
デフォルトで指定されているsqlite3のコメントアウトして、
本番環境ではpgを使うように追記する。
##/Gemfileの編集 # Use sqlite3 as the database for Active Record #gem 'sqlite3' ↑コメントアウト! ただこれだとlocalで動かすときにコケるので、なんかいい方法があったら追記します。 group :product do gem 'pg' end ↑追記!
/config/database.ymlの編集
#database.ymlのproduction箇所を下記に編集 production: <<: *default url: <%= ENV['DATABASE_URL'] %>
これで環境変数DATABASE_URLを参照するようになるそうです。(下記参考)
qiita.com
後はpushしてHerokuにデプロイ
bundle install --without production git commit -am 'for postgresql' git push git push heroic master
なお、bundle installの際に本番環境ではpostgresqlを使うことを反映させるため、--without productionオプションをつけて実行しておきます。
これでうまくデプロイできるはず。
デプロイできているのに"The page you were looking for doesn't exist."が出る
これが意外と解決できなくて苦しみました。
ローカルだと"Yay! You’re on Rails!"の画面が出るのに、なぜかHerokuだとページがないと言われる問題です。
これは、railsの初期のtop画面はHerokuでは上手く表示されないらしく、
コントローラーにアクションを追加して、route.rbでtop画面を設定すると直ることがわかりました。
以下、簡単なサンプルです。
/app/controllers/application_controller.rbにアクションを追加
class ApplicationController < ActionController::Base def hello render html: "hello, world!" end end
/config/route.rbでtop画面を指定
Rails.application.routes.draw do # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html root 'application#hello' end
これでHerokuにデプロイした際に"hello, world!"を出力することができます。
ちなみに、プリコンパイルでコケてることもあったようなのですが、私の環境だと大丈夫でした。
何年か前の記事が多いので、最近は大丈夫になったのかな。
qiita.com