Edited at

【デプロイ】ゼロから始めるElixir on Phoenix Ⅲ(2019)


注意事項

【APIサーバ構築】ゼロから始めるElixir on Phoenix Ⅱ (2019)の続きです。

※筆者はCloud9でやろうとしてもpipができなかったので、ローカルでgit cloneしています。


Gigalixirについて

前々からデプロイしたい!と思っていましたが

piacere_ex氏がGigalixirについて記事を書いてくださったので

便乗して私もデプロイはGigalixirでやることにしました。

Gigalixirとは一言で言えば「Elixirのデプロイが簡単にできるHeroku」です。


おいおい、この記事書く必要があるのか…?

手順自体は上記のpiacere_ex氏の記事①と②を読めば丸わかりです。

この記事必要なのか?


ハマった_(:3」∠)_

前回までに作ったAPIサーバを上げると

「unhealth」とか怒られました。不健康って(´・ω・`)

ローカル(というかCloud9)では動作するのに

Gigalixirでは動作しない…なんでや!!


Sapporo.BEAMとの出会い

少し前にSapporo.BEAM(サッポロビーム)という勉強会に参加させて頂きました。

(四年程前から週一で「クリスマス」であろうと「正月」であろうと開催してきたそうです!!)

ワイ「実はGigalixirにデプロイしても動かなくって……」

主催「ローカル環境で動作するなら「prod.exs」と「config.exs」に問題があると思います。」


原因はconfigの「prod.exs」と「config.exs」でした\(^o^)/

まずは前回までのソースのConfigフォルダにある「config.exs」を見てみましょう。


config/config.exs

url: [host: "localhost"], # 15行目


明らかに嘘です。Gigalixirはローカルじゃありませんね。

この行はコメントアウトしました。

次に「prod.exs」を見てみましょう。


config/prod.exs

config :api, ApiWeb.Endpoint,

http: [:inet6, port: System.get_env("PORT") || 4000],
url: [host: "example.com", port: 80],
cache_static_manifest: "priv/static/cache_manifest.json"

以下のように修正します。


config/prod.exs

config :api, ApiWeb.Endpoint,

http: [port: {:system, "PORT"}], # 書き換える
url: [host: "example.com", port: 80],
cache_static_manifest: "priv/static/cache_manifest.json",
server: true # これがないと動かない

server: trueGigalixir公式によると


Without this line, your app will not start the web server!

server: true is very important and is commonly left out. Make sure you have this line.


雰囲気訳(※かなりテキトーです)

「この行がないと、お前さんのアプリがウェブサーバーを開始しないぞ!」

「server: trueはとても重要なんだが、一般的には除外されてるぞ。この行があることをちゃんと確認しちくり〜」

(´°̥̥̥̥̥̥̥ω°̥̥̥̥̥̥̥`)えぇ…

※piacere_ex氏の記事にもありますが、同ファイルの一番下の行にあるimport_config "prod.secret.exs"もコメントアウトする必要があります。

あとはGigalixirにpushすれば動くはずです!

実際にうごいたやつ

もし動かない場合は下記コマンドでログを確認しましょう!(これも主催から)

gigalixir logs -a Gigalixirのプロジェクト名


まとめ

Phoenixで構築したものがローカル環境なら動くのに

Gigalixirだと動かない場合は

本番環境用の設定になってるか確認しましょう!

ログも公式も英語だけど読みましょう……

あとコミュニテイって大事!!