Techioz Blog

Heroku 環境の最小限

概要

Heroku の環境を更新していますが、使用しているビルドパックの 1 つは Ruby に基づいており、新しい heroku-22 環境/スタックではデフォルトで利用できなくなりました (PHP アプリでも必要ありません)。

ドキュメントから:

ただし、Ruby の経験がまったくないので、これらのファイルに何を含めるべきかわかりません。 Heroku で Ruby のインストールをトリガーするための最小限の Gemfile の有効なセットは何ですか?

解決策

編集済み

空の Gemfile だけでは十分ではなく、実際には Gemfile.lock も必要であることがわかりました。

-----> Building on the Heroku-22 stack
-----> Using buildpacks:
       1. heroku/python
       2. heroku/ruby
       3. https://github.com/thoughtbot/heroku-buildpack-mysql
       4. heroku/php
       5. heroku/nodejs
-----> Python app detected
-----> Using Python version specified in runtime.txt
-----> Stack has changed from heroku-20 to heroku-22, clearing cache
-----> No change in requirements detected, installing from cache
-----> Installing python-3.10.8
-----> Installing pip 22.2.2, setuptools 63.4.3 and wheel 0.37.1
-----> Installing SQLite3
-----> Installing requirements with pip
       Collecting supervisor
         Downloading supervisor-4.2.4-py2.py3-none-any.whl (749 kB)
       Installing collected packages: supervisor
       Successfully installed supervisor-4.2.4
-----> Ruby app detected
grep: /tmp/build_bebc9aa2/Gemfile.lock: No such file or directory
-----> Compiling Ruby/NoLockfile
!
!     Gemfile.lock required. Please check it in.
!
!     Push rejected, failed to compile Ruby app.
!     Push failed

空の Gemfile は Ruby のインストールをトリガーしますが、heroku/ruby パッケージ自体にはロック ファイルが必要です。

試行錯誤の結果、次のファイルが機能することがわかりました。

# Gemfile
source 'https://rubygems.org'
# Gemfile.lock
GEM
  remote: https://rubygems.org/
  specs:

PLATFORMS
  ruby

DEPENDENCIES

BUNDLED WITH
   1.17.3

Gemfile.lock は、(バンドルのインストール後) バンドル インストールを実行することによって自動生成することもできます。