1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Herokuでデプロイに失敗するときの対処法(Ruby app detected されない問題)

Posted at

Herokuで自作アプリを運用していますが、ビルド時にエラーになる現象に遭遇しました。

Heroku特有のエラーであり、インターネット上に情報があまりなかったので、解決の手順をまとめます。

Build Logを見る

コンソールのActivityからBuild Logを見ます。
失敗時のログと正常時のログを見比べてみるとは、失敗時はRuby app detectedInstalling bundler 2.0.2などと、Rubyのアプリケーション特有のBuild関連の処理がされていないことがわかりました。

失敗時

-----> nginx-buildpack app detected
./
./nginx
./mime.types
./nginx-debug
-----> nginx-buildpack: Installed nginx/1.18.0 to app/bin
-----> nginx-buildpack: Added start-nginx to app/bin
-----> nginx-buildpack: Added start-nginx-debug to app/bin
-----> nginx-buildpack: Added start-nginx-solo to app/bin
-----> nginx-buildpack: Default mime.types copied to app/config/
-----> nginx-buildpack: Default config copied to app/config.
-----> Discovering process types
       Procfile declares types -> web
-----> Compressing...
       Done: 4.9M
-----> Launching...
       Released v154
       https://supplebox.herokuapp.com/ deployed to Heroku
...略

正常時

-----> Ruby app detected
-----> Installing bundler 2.0.2
-----> Removing BUNDLED WITH version in the Gemfile.lock
-----> Compiling Ruby/Rails
-----> Using Ruby version: ruby-2.7.1
-----> Installing dependencies using bundler 2.0.2
       Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
       [DEPRECATED] The `--deployment` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set deployment 'true'`, and stop using this flag
       [DEPRECATED] The `--path` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set path 'vendor/bundle'`, and stop using this flag
       [DEPRECATED] The `--without` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set without 'development:test'`, and stop using this flag
       [DEPRECATED] The --binstubs option will be removed in favor of `bundle binstubs`
       Fetching gem metadata from https://rubygems.org/............
       Using rake 13.0.1
...略

Rubyアプリとして認識してくれていないみたい

Ruby app detectedされていないのが原因のよう。
Herokuは、Railsアプリケーションならば自動的にRuby用のビルドをしてくれているという認識でしたが、この辺の処理について調べてみました。

どうやら、HerokuはソースコードからRubyアプリケーションであることを自動検知して、一連のビルドプロセスのまとまり(ビルドパック)を使ってアプリケーションを自動ビルドしてくれているようです。

今回の事象については、Rubyのビルドパックが起動していないことが原因なので、手動でビルドパックを追加してみます。

ビルドパック追加

を参考に、現状のビルドパックを確認し、追加します。

もともとheroku-community/nginxというビルドパックがありましたが、heroku/nodejsheroku/rubyというビルドパックをindexオプションを使って順番を指定してインストールしました。

$ heroku buildpacks
=== supplebox Buildpack URL
heroku-community/nginx

$ heroku buildpacks:add --index 1 heroku/nodejs
Buildpack added. Next release on supplebox will use:
  1. heroku/nodejs
  2. heroku-community/nginx
Run git push heroku main to create a new release using these buildpacks.

$ heroku buildpacks:add --index 2 heroku/ruby
Buildpack added. Next release on supplebox will use:
  1. heroku/nodejs
  2. heroku/ruby
  3. heroku-community/nginx
Run git push heroku main to create a new release using these buildpacks.

再ビルド。治った!!

Herokuは再ビルドができないようなので、空コミットなりのPRをマージしてデプロイしなおします。

そして、治りました。

Build LogにRuby app detectedと表示され、Ruby関連のビルドが正常に動き、正常にデプロイできました。

めでたし。

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?