-
Notifications
You must be signed in to change notification settings - Fork 9
slug compiler
slugとは、圧縮され、事前にパッケージされたアプリケーションのコピーのことです。
アプリケーションは、dyno manifoldを経由し、高速なディストリビューションを可能とするために
最適化されています。Herokuへgit push
する際、slug compilerがコードを受け取り、リポジトリをslugへ変換します。
その後で、アプリケーションのスケーリングが行われ、実行のためにslugをダウンロードし、dynoへと展開します。
slug compilerは、git pre-receive hookにより呼び出され、以下のステップで実行されます。:
-
マスターブランチから新規のHEADのチェックアウトを作成します。
-
.git
ディレクトリ、log
とtmp
にある全ファイル、最上位の.slugignore
に指定された全ファイルを含む未使用のファイルをリムーブします。 -
ダウンロード後、ビルドし、さらにビルドファイル(例えば、Gemfile、
package.json
、requirements.txt
、pom.xml
等)に指定されたローカルの依存関係をインストールします。その際、プログラミング言語毎にサポートされている依存関係のマネージメントツール(例:Bundler、 npm、 pip、 Maven)を使用します。 -
最終的なslugのアーカイブをパッケージ化します。
If your repository contains files not necessary to run your app, you may wish to add these to a .slugignore
file in the root of your repository. Examples of files you may wish to exclude from the slug:
- Unit tests or specs
- Art sources (like .psd files)
- Design documents (like .pdf files)
- Test data
The format is roughly similar to .gitignore
, except it does not support the negation operator !
. Here's an example .slugignore
:
:::text
*.psd
*.pdf
test
spec
The .slugignore
file ensures that matching assets, that were pushed to Heroku when you deployed your application, are not included in the final slug.
You can further reduce the number of unnecessary files (for example, log
and tmp
directories) by ensuring that they aren't tracked by git, in which case they won't be deployed to Heroku either. See Using a .gitignore file.
Your slug size is displayed at the end of a successful compile. You can roughly estimate slug size locally by doing a fresh checkout of your app, deleting the .git
directory, and running du -hsc
.
:::term
$ du -hsc | grep total
2.9M total
The maximum slug size is 200MB. Most apps should be far below this size.
Smaller slugs can be transferred across the dyno manifold more quickly allowing for more immediate scaling. Generally speaking any slug under 15MB is small and nimble; 50MB is average; and 90MB or above is weighty.
If you find your app getting into the 90MB+ range, you may want to look into some techniques for reducing its size:
- Move large assets like PDFs or audio files to asset storage.
- Remove unneeded dependencies and exclude unnecessary files via
.slugignore
. - For Ruby, when possible reference a released gem by name in your Gemfile rather than loading it from source using the :git option.