2015-10-24 1 views
5

exrmを使用してPhoenixアプリケーション(ElixirとErlangに基づく)のリリースを作成しようとしています。exrmクラッシュによるフェニックスアプリケーションリリースの実行

devミックス環境の最初のリリースは正常に作成されますが、実行すると./rel/my_app/bin/my_app consoleがクラッシュします。これは、Ubuntu 14.04をVagrant/Virtual Box仮想マシン内で実行している場合に発生します。

私のMacでは、同じ設定がうまく動作します。残念ながら、Ubuntuを実行するターゲットサーバと同じアーキテクチャのマシンにリリースを構築する必要があります。

ここにアプリケーションを見つけることができます:https://github.com/mavenastic/my_app。依存関係をインストールし、VM上でプロジェクトを作成する手順(STEPS.mdを参照)とErlang crash dumpを実行する手順が含まれています。

{"Kernel pid terminated",application_controller,"{application_start_failure,my_app,{{shutdown,{failed_to_start_child,'Elixir.MyApp.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,240}]}]}}}}},{'Elixir.MyApp',start,[normal,[]]}}}"} 

EDIT:

私はMIX_ENV=prod mix releaseと同様に、本番環境のリリースを作成しようとしました。ここ

は、私はコンソールを実行しようとするから取得エラーです。リリースは正常に生成され、MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app consoleはうまく動作します。しかし、サーバーにpingを実行したり、リモートコンソールを起動したりすることはできません。そのため、アプリケーションが正常に動作するためにはまだ何かが失われているようです。

$ MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app start 
$ MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app ping 

=INFO REPORT==== 24-Oct-2015::10:28:25 === 
Protocol: "inet_tcp": register/listen error: econnrefused 
escript: exception error: no match of right hand side value 
       {error, 
        {{shutdown, 
          {failed_to_start_child,net_kernel, 
           {'EXIT',nodistribution}}}, 
         {child,undefined,net_sup_dynamic, 
          {erl_distribution,start_link, 
           [['[email protected]',longnames]]}, 
          permanent,1000,supervisor, 
          [erl_distribution]}}} 

$ ps aux | grep my_app 
vagrant 2572 0.0 0.0 7532 96 ?  S 10:28 0:00 /vagrant/my_app/rel/my_app/erts-7.1/bin/epmd -daemon 
vagrant 2575 0.0 0.2 9448 2256 pts/0 S+ 10:28 0:00 grep --color=auto my_app 

$ MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app remote_console 
$ 

また、私が集めたものから、私もdevのリリースやその他の環境を作成することができるはずです。欠けている部分が両方の環境に影響する可能性があります。

ありがとうございます!

答えて

0

masterブランチexrmを使用して、@bitwalkerの提案に従って、問題を修正しました。

2

私には、dev環境(prodのenvではなく)でリリースを作成しているようです。

この部分:(ひどくと上空ラアーランà)エラーメッセージの

{undef,[{'Elixir.Mix.Project',config,[],[]} 

は基本的にMix.Project.config/0が未定義であることを述べています。 Mixはリリースには含まれていませんが、Phoenixがコードリローダで使用していると思います。通常はプロダクションでは実行しません。

MIX_ENV=prodでリリースを生成し、動作するかどうかを確認してください。

+0

@whatyouhideさんの回答ありがとうございます。私が理解しているところから、私は 'dev'環境用のリリースを作ることができるはずです。[here](http://hashnuke.com/2015/07/19/convenience-hacks-for-using-exrm-with参照) -phoenix-apps.html)。私は 'prod'のリリースを作成し、その結果を知ってもらいます。 – mavenastic

+0

私のedit @whatyouhideをご覧ください。 – mavenastic

1

私はここにも問題追跡でこれを置くが、ただ後世のために:

をあなたはMyApp.Endpointためのconfigの下にあなたのprod.exsserver: trueを追加する必要があります。これはフェニックスがリリース内でどのように始まるかです。

フェニックスでは、リリースには常にMIX_ENV=prodを使用することをお勧めします。MIX_ENV=devには、コードリロードなどの多くの開発固有の機能があり、リリース内では動作しないか、期待どおりに動作しません。

設定エラーが発生している場合は、ご使​​用の環境固有のファイルに必要なPhoenix設定が不足している可能性があります。MIX_ENV=prod mix compileを実行して正常にコンパイルされているかどうかを調べることでこれをテストできます。 --verbosity=verboseでリリースをビルドして、問題をトレースするための詳細な出力を得ることもできます。

リリースにpingまたはコンソールできなかった理由は、起動時に失敗したためです。

+0

ありがとう@bitwalker。残念ながら 'server:true'を追加しても問題は解決しません。私が紛失していることは明らかなことかもしれません。私は問題を[Githubで]更新しました(https://github.com/bitwalker/exrm/issues/218)、解決策が見つかるとこの記事を更新します。 – mavenastic

+0

これはなぜデフォルトでは設定されていないのでしょうか? –

1

@bitwalkerが正しい場合は、config/prod.exsファイルにserver: true a la http://www.phoenixframework.org/v0.13.1/docs/advanced-deploymentを追加する必要があります。

私はあなたのプロジェクトをクローンし、devリリースを生成しましたが、同じ失敗が発生しています。私はdevビルドの私の個人的なプロジェクトの多くでこの同じ失敗を経験しました。ただし、prodビルドは常に動作します。

したがって、それに正しい情報で所定の位置にconfig/prod.secret.exsを入れて、私のconfig/prod.exsファイルにserver: trueを追加した後、私はPRODリリースを生成し、正常consolestartpingを実行することができますよ。私は、ホットコードリローダがdevビルドの犯人である可能性があると思うが、それはエラーに存在することを除いて、確かに何か別のものがdevprodについては存在しないという証拠はない。アプリケーションを起動するときに、これは劇中でのリリースとのミックスではありませんよう

はところで、あなただけのMIX_ENVPORTを指定する必要はありません。

PORT=4000 bin/my_app start

私のアドバイスは、devビルドをスキップすることですstagingprodビルドを使用してください。 stagingサーバーをお持ちでない場合は、stagingリリースをローカルマシンaa https://exrm.readme.io/docs/deploymentに展開できます。

+0

詳細情報@ jason-harrelsonありがとうございました。最新のテストでは、 'prod'環境だけを使っていたので、なぜまだ失敗しているのか分かりません。 'exrm'の' master'ブランチを使って問題を修正しました。 – mavenastic

関連する問題