LoginSignup
16

More than 3 years have passed since last update.

Herokuにpushしたらprecompile assets faild.が。pushできたと思ったらApplication Errorが。解決するまで。

Last updated at Posted at 2019-03-16

Railsで作ったアプリをHerokuにデプロイするときにはまったので、解決するまでを記録します。

...のまえに結論

$ heroku push origin master で precompile assets faild. エラーがでたら...

  • 目立つエラーメッセージに惑わされずにログをじっくりたどる
  • 必要なキーの設定をHeroku側にしてるか確認する
  • API使ってる時はコールバック先確認

HerokuにpushできたけどApplication Errorが表示されちゃったら...

  • db:migrateしたか確認
  • Gemfileでgemのグループを確認

ローカル環境
MacOS 10.14.3
Rails 5.2.2
Ruby 2.4.1p111
MySQL 5.7.24

Herokuにアカウント作り、ログインし、git initも済んでる状態。

$ git push heroku master

ターミナル
:
:
remote:  !
remote:  !     Precompiling assets failed.
remote:  !
remote:  !     Push rejected, failed to compile Ruby app.
:
:

コンパイルエラーが出てしまった。
ググると、cssをsccsに変えると良い。とか、cssでエラー出てるはず。とかがヒットするのでまずscss周りを見直す。
W3Cの警告が出てるものの、それが原因ではなさそう。

あとは以下を加えると良いというアドバイスが多かったので、production.rbに以下一文を追加してみる。

config/environments/production.rb
config.assets.initialize_on_precompile = false

相変わらず

Precompiling assets failed.

bashに色つけてるので赤い...

エラーログを遡ると、赤字のずっと前に

ターミナル
:
:
remote:        Running: rake assets:precompile
remote:        rake aborted!
remote:        KeyError: key not found: "TWITTER_KEY"
:
:

Twitterの認証キーがないエラーが出ていた。気がつかなかった。
(アプリにTwitter認証つけてます)

Heroku側に設定するために、.envファイルを確認します。

.env
TWITTER_KEY="XXXXXXXX"
TWITTER_SECRET="XXXXXXXXXXX"

確認できたキーをHerokuのDashboard>アプリ名>Settingsの「Reveal Config Vars」に保存します。

HerokuのDashboard → https://dashboard.heroku.com/

ついでに、Twitter Developerページのダッシュボードで指定していたWebsite URL(いったん適当なURLにしていた)とCallback URL(localhost:3000/auth/twitter/callbackにしていた)をHerokuで生成されたURLに変更しておきます。
コールバックURLの方はlocalhost:3000の部分を書き換える。

(Herokuで生成されたURLはHerokuダッシュボードのアプリ名>SettingsのDomains and certificatesで確認できる。)

Twiiter Dev → https://developer.twitter.com/

そうしたら

Precompiling assets failed.

のエラーは消えました。(やった)

しかし

ターミナル
$ heroku open

でアプリケーションエラーが出てしまう。

heroku_app_error.jpg

言われたとおりターミナルでログ見ます。

ターミナル
$ heroku logs --tail
:
:
2019-03-16T06:10:52.352205+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=xxxxxxxx.herokuapp.com request_id=63647cae-55a1-469e-9de7-c2ac1baa9f44 fwd="xxx.xxx.xxx.xxx" dyno= connect= service= status=503 bytes= protocol=https
2019-03-16T06:10:53.066646+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=xxxxxxxx.herokuapp.com request_id=427cafc7-33b7-4381-a271-8e114b305d0e fwd="xxx.xxx.xxx.xxx" dyno= connect= service= status=503 bytes= protocol=https

「H10 heroku error」で調べてみる。うーん。

db:migrateしてなかったことに気がつきここで

ターミナル
$ heroku run rake db:migrate

します。

状況変わらず "App crashed" 壊れてる...

Herokuでrails consoleしてみる

ターミナル
$ heroku run rails console

すると...

ターミナル
You don't have bcrypt installed in your application. Please add it to your Gemfile and run bundle install

Gemないって言われた...
Gemfile確認

Gemfile
group :development, :test do
  :
  gem 'acts-as-taggable-on'
  gem 'bcrypt'
  gem 'carrierwave'
end

なぜ君たちこんなところにいるんや...(私が置いた)
本番でも使いたいgemを、development、testグループの外に出します。

Gemfile

  gem 'acts-as-taggable-on'
  gem 'bcrypt'
  gem 'carrierwave'

group :development, :test do
  :
end

改めて

ターミナル
$ git add .
$ git commit -m "ほにゃほにゃ"
$ git push origin master
$ git push heroku master
$ heroku open

無事に動きました。
この間に、masterブランチをHEADにする作業などを挟んでます。

以上。

ポエム

さて。

ここまで自分で解決できずに、スクールのメンターさんに一緒に解決していただきました。1人では無理だった。聞ける人がいる環境って必要だなぁ。
そして3ヶ月お世話になったスクールの受講期間が終わり、週一ペースで見てもらってたメンターさんとも最後でした。フルタイムバイトしつつなので睡眠時間の確保とモチベーションの維持が難しかったです。

教材として提供されているインスタ風の写経アプリのあと、オリジナル開発として一通りのCRUD、セッション管理に加え、Twiiter認証や、カレンダー表示、タグ、レスポンシブなハンバーガーメニュー、ページネーションなど興味があるものを実装したTwitter風メモアプリ(今回デプロイしたやつ)を作ってみました。

最初に考えたMVP(Minimum Viable Product)を期日内に実装できなかったし、テストできなかったし、理解が曖昧なままとりあえずコピペで動いた部分が多いアプリなので反省点多いですが、逆にいうと課題感多めで引き続き手を加えていけそう。エラーが出たら落ち着いてログを辿ろう。

コース選択しておきながら手がつけられなかったブロックチェーンもやってみたいです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16