プログラミング

Railsチュートリアル1章でHerokuにデプロイできない時の対処方法

Railsチュートリアルの第1章でHerokuにデプロイできずに早速挫折しかけました。

今後、Railsチュートリアルを行う方が同じ思いをしないでいいように対処方法をまとめておきます。

問題の概要

「1.5.2 Herokuにデプロイする」でHerokuにデプロイ後に、デプロイしたアプリ(Hello, World!と表示するのみ)を表示しようとするとアプリケーションエラーとなり「Hello, World!」が表示されない。

こんな感じの画面になります。

エラー発生までの手順

1.5.1 HerokuセットアップにてHerokuではデータベースがPostgreSQLになるため、Gemfileの本番環境用のDBをPostgreSQL(pg)に変更します。

最終的にはGemfileを以下のように修正するように言われるので、指示通りに修正します。

本場用以外のgemをインストールするために以下のコマンドを実行します。

その後、以下のコマンドでherokuにブランチを作成します。

この時に「bundle install」が実行されます。

この状態でアプリケーションをHerokuにデプロイ(push)したとしてもPostgreSQLのgemがインストールされていないため、アプリケーションエラーとなってしまいます。

「heroku logs」でログを確認してみます。
*「heroku logs」はHerokuのログを確認するコマンドです

エラーが出てるのはなんとなく分かりますが、原因が分かりません。

そこで、「heroku run rails console」を実行してみます。
*「heroku run rails console」はHeroku上のRailsコンソールを起動するコマンドです

「sqllite3のgemがインストールされてません」的な感じのメッセージです。

この状態が出たまま「heroku create」時に表示されたURLか「heroku open」を実行すると上記のアプリケーションエラーの画面となります。

エラーの原因と解消方法①:本番環境がSQlite3に接続しようとしている

上記のエラーの場合は本番環境用にsqlite3のgemがインストールされていない以前に、herokuはSQlite3に対応していないにも関わらず、SQlite3に接続しようとしていることが問題となります。

エラーの原因①

この場合は、データベースの接続を管理している「config/databese.yml」の記述を見直す必要があります。

僕の場合は以下のようになっており、本番環境(production)もSQlite3を使用する設定となっていました。

エラーの解消方法①

上記のproductionの設定を以下のようん修正してPostgreSQLを使用するようにすればOKです。

databese.ymlの設定内容

  • adapter
    使用するデータベースの種類。
    アダプタには各データベースに対応するsqlite3, postgresql, mysql2, oracle_enhanced などがあります。
  • encoding
    文字コード
  • database
    データベース名
  • username
    データベースに対するユーザー名
  • password
    データベースに対するパスワード
  • hots
    接続先データベースが起動しているサーバーのIPアドレス(ホスト名)

エラーの原因と解消法②:本番環境用のgemがインストールされない

エラーの原因①を解消したらうまくいく方もいるかもしれませんが、僕と同じようにRailsチュートリアルの手順に沿ってセットアップしている場合は、おそらく原因①を解消して、デプロイしても現象は解消されないと思います。

「heroku run rails console」を確認すると以下のようなエラーが確認できると思います。

本番環境にPostgreSQL(pg)のgemをインストールする必要があるよ的なエラーです。

エラーの原因②

これは1.5.1 Herokuセットアップにて実行する本番環境用以外のgemをインストールするコマンド。

このコマンドの「–without production」が「本番環境以外の」ということを指示しており、このコマンドを実行した結果、「.bundle/config」の内容が以下のようになってしまいます。
※「.bundle/config」は「bundle install」の設定ファイルになります。

設定ファイルで「本番環境以外以外の」と設定されているため、この状態ではいくら「bundle install」しても本番環境用のgemはインストールされません。

エラーの解消方法②

「.bundle/config」ファイルの内容を以下のように修正すればOKです。

これでherokuにデプロイ(push)してあげれば問題は解消できるはずです。

まとめ

人によってはエラーが出ない場合もあるかもしれませんし、エラーの原因のどちらかしか発生しない可能性はありますが、万が一僕と同じようにエラーとなった場合の参考となれば幸いです。

Railsでのアプリケーションの作成に重きをおく場合は、どうしてもエラーが解消できなければHerokuへのデプロイはとりあえず諦めるというのも一つの選択肢だと思います。

2020年2月8日追記

最新のRailsチュートリアル第6版では上記と別のエラーが発生してHerokuにデプロイできないことが発生します。

そちらについても別の記事で対処方法を紹介しているので、そちらも参照してもらえると幸いです。

【Railsチュートリアル】第6版の1章でHerokuにデプロイできなかった時の対応方法お久しぶりです。Jyu2です。 最近はブログの更新もままなっていませんが、以前挫折したRailsチュートリアルを再度1からチャレン...
ABOUT ME
Jyu2
ソフトウェア会社(SIer)で10年以上勤務のシステムエンジニア|ポケットWiFi使用歴2年以上|ポケットWiFi+αで快適でお得なインターネット環境を構築するための情報を発信|その他、IT情報やWebサービス、アプリ、ガジェットなどの情報を発信|自分と他の人のカバンの中身を紹介するメディア「カバンの中身ラボ(https://kaban-no-nakami-labo.com/)」も運営しています。 ポケットWiFi選びに迷ったらTwitter、お問合せフォームからご連絡ください。