[解決済み] Elixirアプリケーションを実行するには?
質問
Elixirアプリケーションを実行する正しい方法は何ですか?
で簡単なプロジェクトを作成しています。
mix new app
となり、その後にできるのは
mix run
で、基本的にアプリは一度だけコンパイルされます。ですから私が追加すると
IO.puts "running"
で
lib/app.ex
では
"running"
を初めて見るだけで、連続した
run
は、何らかの変更がない限り何もしません。次に生成された
app.app
?
もちろん、できることは知っています。
escript: [main_module: App]
で
mix.exs
を指定すると
def main(args):
を指定し、その後
mix escript.build
./app
が、個人的にはちょっと面倒くさい。
みたいなのもありますね。
elixir lib/app.exs
はカウントされませんが
mix.exs
の依存関係のために必要です。
app
.
どのように解決するのですか?
mix run
は、アプリを実行します。ただ、単純に
IO.puts "something"
を記述した場合、その行はコンパイル時に評価されるだけで、実行時には何もしません。アプリを起動したときに何かを開始させたい場合は、そのことを
mix.exs
.
通常、トップレベルの
Application
が必要です。それを実現するために
mod
オプションを
mix.exs
:
def application do
[
# this is the name of any module implementing the Application behaviour
mod: {NewMix, []},
applications: [:logger]
]
end
そしてそのモジュールに、アプリケーションの起動時に呼び出されるコールバックを実装する必要があります。
defmodule NewMix do
use Application
def start(_type, _args) do
IO.puts "starting"
# some more stuff
end
end
は
start
コールバックは実際にはトップレベルのプロセスや監督ツリーのルートをセットアップする必要がありますが、この場合、すでに、あなたが
mix run
を使うたびに呼び出されることがわかります。
def start(_type, _args) do
IO.puts "starting"
Task.start(fn -> :timer.sleep(1000); IO.puts("done sleeping") end)
end
この場合、コールバックで単純な処理を開始し、1秒間スリープしてから何かを出力しています。
start
コールバックの API を満たすには十分ですが
"done sleeping"
. この理由は、デフォルトでは
mix run
はそのコールバックの実行が終わると終了してしまうからです。そうならないようにするためには
mix run --no-halt
- を使用する必要があります。この場合、VMは停止されません。
アプリケーションを起動するためのもう一つの便利な方法は
iex -S mix
- と同じような動作をします。
mix run --no-halt
と同じように動作しますが、さらに
iex
シェルを開き、そこで自分のコードや実行中のアプリケーションと対話することができます。
関連
-
[解決済み] Elixirで文字列を結合するには?
-
[解決済み] def` と `defp` の違いは何ですか?
-
[解決済み] Elixir の文字列を整数または浮動小数点に変換する
-
[解決済み】ElixirまたはPhoenixフレームワークで、数時間ごとに実行するコードをスケジュールするにはどうすればよいですか?
-
[解決済み】Elixirにはなぜ2種類の関数があるのですか?
-
[解決済み] Elixirで変数の種類を確認する方法
-
[解決済み] Elixir: useとimportの違い
-
[解決済み] キーワードリストの利点は何ですか?
-
[解決済み] Rails Consoleに相当するPhoenixはありますか?
-
[解決済み] Elixir で現在の日付と時刻を取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Elixirで文字列を結合するには?
-
[解決済み] def` と `defp` の違いは何ですか?
-
[解決済み] Elixir の文字列を整数または浮動小数点に変換する
-
[解決済み] Elixirで変数の種類を確認する方法
-
[解決済み] Elixir: useとimportの違い
-
[解決済み] Elixir/erlangはマイクロサービスアプローチのどこに位置づけられるのか?[クローズド]
-
[解決済み] キーワードリストの利点は何ですか?
-
[解決済み] Rails Consoleに相当するPhoenixはありますか?
-
[解決済み] Elixirのリストやタプルにアイテムが存在するかどうかを確認するには?
-
[解決済み] Elixir で現在の日付と時刻を取得する