2017-09-06 19 views
0

私たちは蒸留所を使って、 phoenixアプリケーションで実行可能ビルドリリースを作成しています。我々は、デジタル海洋にアプリケーションをデプロイするためにドッカーを使用しています。私たちは他のマシンとコードを共有したくないので、コンパイルされたファイルを実行可能ファイルとして実行したいので、コマンドラインからリモートマシン上で実行することができます。phoenixで実行可能なリリースビルドを実行するにはどうすればよいですか?

だからいくつかの研究の後、私たちはdistillery plugin我々はリリースを作成することができます

mix release --executable 

を使用してビルドを作成し、実行可能なリリースを構築することがわかりました。それはあなたがこのエラーを解決する方法を私を助けてください、私はフォアグラウンドコマンドに

> $ _build/dev/rel/project/bin/project foreground [info] Application 
> project exited: Project.start(:normal, []) returned an error: 
> shutdown: failed to start child: Project.Endpoint 
>  ** (EXIT) shutdown: failed to start child: Phoenix.CodeReloader.Server 
>   ** (EXIT) an exception was raised: 
>    ** (UndefinedFunctionError) function Mix.Project.config/0 is undefined (module Mix.Project is not available) 
>     Mix.Project.config() 
>     (phoenix) lib/phoenix/code_reloader/server.ex:29: Phoenix.CodeReloader.Server.init/1 
>     (stdlib) gen_server.erl:328: :gen_server.init_it/6 
>     (stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3 {"Kernel pid 
> terminated",application_controller,"{application_start_failure,project,{{shutdown,{failed_to_start_child,'Elixir.Project.Endpoint',{shutdown,{failed_to_start_child,'Elixir.Phoenix.CodeReloader.Server',{undef,[{'Elixir.Mix.Project',config,[],[]},{'Elixir.Phoenix.CodeReloader.Server',init,1,[{file,\"lib/phoenix/code_reloader/server.ex\"},{line,29}]},{gen_server,init_it,6,[{file,\"gen_server.erl\"},{line,328}]},{proc_lib,init_p_do_apply,3,[{file,\"proc_lib.erl\"},{line,247}]}]}}}}},{'Elixir.Project',start,[normal,[]]}}}"} 
> 
> Crash dump is being written to: erl_crash.dump...done Kernel pid 
> terminated (application_controller) 
> ({application_start_failure,project,{{shutdown,{failed_to_start_child,'Elixir.Project.Endpoint',{shutdown,{failed_to_start_child,'Elixir.Phoenix.Code 

を実行した後、次のエラーを取得していますこれらの

[email protected]:project$ _build/dev/rel/project/bin/project foreground 
[email protected]:project$ _build/dev/rel/project/bin/project start 
[email protected]:project$ _build/dev/rel/project/bin/project console 

を実行するために、3つのコマンドを提供しますか?

誰かが実行可能なリリースファイルを作成するためのより良いアプローチを持っている場合は、私も聞いて嬉しいです。どのLinuxベースのシステムでもDockerを使用してソースコードを公開することなく展開することができます。

さらに詳しい情報を提供する必要があるのか​​、質問の修正が必要かどうか教えてください。 ありがとう

+1

あなたは 'MIX_ENV = prod mix release --executable --env = prod'を試すことができますか? '_build/prod'でリリースを入手するべきです。 – Dogbert

答えて

3

MIX_ENV=devでリリースをビルドしていますが、Phoenixを使用すると、コードリロードが含まれていて、コードリロードがリリース内で動作しないことになります。 MIX_ENV=prodでリリースを構築するか、devでコードリローダを無効にする必要があります。

+0

私は同じ問題に直面している 'prod' envで試しました。また、アプリケーションで 'phoenix_live_reload'プラグインを削除しても、同じエラーが表示されることを確認しました。 – punitcse

+0

同じエラーが本当ですか?スタックトレースは、コードリロードが失敗したことを明確にしているので、同じエラーがあった場合は削除できませんでした。 – bitwalker

+0

はい私の設定ファイルに 'code_reload:false'をセットすることでこの問題を解決しました – punitcse

関連する問題