Help us understand the problem. What is going on with this article?

Elixir プロジェクトを Docker 化して Heroku の worker として動かす

More than 1 year has passed since last update.

Heroku では昔ながらの git リポジトリ push でのデプロイの他に,Docker を利用した Container Registry でデプロイが行える.

また, Heroku では HTTP リクエストを受けてレスポンスを返す Web dyno の他に,バックグラウンドで動く Worker Dyno を作ることができる.

今回, Elixir のアプリケーションを Docker コンテナに乗せて Heroku の worker として動かせるようにデプロイした.

Dockerfile は以下のとおり.気をつけるべきところにはコメントを入れた.

FROM elixir
MAINTAINER niku

# MIX_HOME は required .こうしないと heroku に Deploy した後起動するときに,mix deps.get したはずのライブラリを見つけられない
# MIX_ENV は optional
# MIX_DEBUG は optional
ENV MIX_DEBUG=true \
    MIX_HOME=/root/.mix \
    MIX_ENV=prod

RUN mkdir /app
ADD . /app
WORKDIR /app

RUN mix local.hex --force && \
    mix deps.get && \
    mix compile

# https://devcenter.heroku.com/articles/container-registry-and-runtime#dockerfile-commands-and-runtime
# によると ENTRYPOINT も動作するので
# ENTRYPOINT ["mix"]
# CMD ["run", "--no-halt"]
# でも動くように思えるのだけど `run` command not found で動作しなかった.

# --no-halt を指定しないと起動直後にすぐ終了してしまう
CMD ["mix", "run", "--no-halt"]

と設定する.

Docker コンテナを worker として Heroku へデプロイするには

% heroku container:push worker

というコマンドで行える.詳しくは Pushing an image(s) に書いてある.

この組み合わせで Eloido という Elixir 製 Bot アプリケーションを Heroku の worker として動かすことができた.

こんな感じ.

% heroku ps
Free dyno hours quota remaining this month: 982h 50m (98%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== worker (Free): mix run --no-halt (1)
worker.1: up 2017/09/20 22:57:39 +0900 (~ 20h ago)

うまく動いている.

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away