Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21081

個人アプリRails6.0をHerokuにデプロイした時の失敗話

$
0
0

背景

 個人でRailsアプリをHerokuへデプロイしようした際に、つまづいたポイントが2点あったので記事にします。

  1. DBをMySQLで作成してしまった。
  2. master.keyの設定をミスっていた。

1. DBをMySQLで作成してしまった。

 結論:HerokuへデプロイするならPostgreSQLを使うべきです。

なぜMySQLだといけないのか

 Herokuの無料枠でMySQLを使う場合、ストレージが5 MBの制限があります。一方PostgreSQLの場合、ストレージ制限ではなく、10,000行使用可能になります。個人アプリで5 MB、使用すことはあっても10,000レコード使うことは少ないと思うのでPostgreSQLを使用することをお勧めします。

MySQL ⇒ PostgreSQL へ変更

Rails6.0からデータベースの変更は簡単に行えるようになりました。ターミナルで以下のコマンドを実行すると

ターミナル
railsdb:system:change--to=postgresql

PostgreSQLのデータをGUIで操作する。

 MySQLではSequel Proを使ってデータをGUI操作していました。
 PostgreSQLではPosticoを使ってデータをGUI操作します。
 参考:PostgreSQLのデータをGUIでいじる
 本番環境のPostgreSQLへのアクセスは次の記事がとても参考になりました。
How to Set Up Postico 3 to Connect to a Remote PostgreSQL Server (Heroku)

2. master.keyの設定をミスっていた。

Herokuにデプロイする

 公式サイトをGetting Started on Heroku with Rails 6.x を参考にしながら行いました。
 Herokuアカウントを所持していたのと、rails db:system:changeコマンドを実行済みであったので、Deploy your application to Herokuから手順を進めました。

エラーの発生

 git push heroku masterでprecompile assets faildのエラー発生。ログを読んで見ると、ActiveSupport::MessageEncryptor::InvalidMessageの文字。
早速のググると、直ぐに原因は分かりました。
 Herokuの環境変数にmaster.keyをセットしていなかった。次のコマンドを打って再トライ。

ターミナル
herokuconfig:setRAILS_MASTER_KEY=<ご自身のmaster.key内の値>

 私の場合は、ここでエラーが解決せず数日間悩みました。
 原因は、ローカルの~/.bash_profileに別のRailsアプリケーションのRAILS_MASTER_KEYを設定していた為でした。
 本アプリケーションのmaster.keyよりも優先してENV[RAILS_MASTER_KEY]が、credentials.yml.enc のペアになっていました。

対処

ターミナル
vim~/.bash_profile
.bash_profile
# 以下の記述を削除exportRAILS_MASTER_KEY="################################"

config/credentials.yml.encとconfig/master.keyを削除

ターミナル
EDITOR=vimrailscredentials:edit

を実行して、config/credentials.yml.encとconfig/master.keyを再生成。
新しいmaster.keyの値をHerokuの環境変数に設定する。

ターミナル
herokuconfig:setRAILS_MASTER_KEY=<ご自身のmaster.key内の値>

 再びコマンドを打ち込むと、無事デプロイに成功しました。

ターミナル
gitpushherokumaster

余談

.bash_profileから消した環境変数が反映されないと思ったらbashではなくzshを使っていた件

ここではターミナルをbashを使って説明しましたが、実際にはzshに変更していた為にさらに時間がかかりました。

症状

ターミナル
% printenv
 :
RAILS_MASTER_KEY="################################"
 : 
% vim ~/.bash_profile
.bash_profile
# 以下の記述を削除
export RAILS_MASTER_KEY="################################"
ターミナル
% source ~/.bash_profile
% printenv
 :
#RAILS_MASTER_KEYが消えています。
 : 

一旦は環境変数が消えますが、ターミナルを再起動すると、なぜか消したはずの環境変数が復活していました。what's!?

ターミナル
% printenv
 :
RAILS_MASTER_KEY="################################"
 : 

原因

ターミナルをbashではなくzshを使っていた。

環境変数はターミナルごとで管理しているので、bashとzshで記述するファイルが異なります。

  • bashでは、~/.bash_profile
  • zshでは、~/.zprofile

対処

 上記の操作を~/.zprofileに変更して行うと、うまくいきました。

ターミナル
% printenv
 :
RAILS_MASTER_KEY="################################"
 : 
% vim ~/.zprofile
.zprofile
# 以下の記述を削除
export RAILS_MASTER_KEY="################################"
ターミナル
% source ~/.zprofile

 初歩的なミスで数日時間を取られてしました。
 エラー解決のきっかけは、たまたま同じ事をしている記事が見つけたからです。
 小さなエラー解決の記事でも、誰かの助けになる事が身に沁みました。だから私もこの記事を書くことに決めました。

参考

.bash_profileに書いた環境変数が反映されないと思ったらbashではなくzshを使っていた件


Viewing all articles
Browse latest Browse all 21081

Trending Articles