5

Phoenixを使用して、 (Elixir と Erlang に基づく)ストック アプリケーションのリリースを作成しようとしていますexrm

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

私の Mac では、同じセットアップで問題なく動作します。残念ながら、Ubuntu を実行するターゲット サーバーと同じアーキテクチャのマシンでリリースをビルドする必要があります。

アプリケーションはhttps://github.com/mavenastic/my_appにあります。これには、依存関係をインストールし、VM でプロジェクトを作成するための手順 (「参考文献」を参照STEPS.md) と、Erlang クラッシュ ダンプが含まれています。

コンソールを実行しようとすると、次のエラーが表示されます。

{"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,[]]}}}"}

編集:

で本番環境用のリリースも作成してみました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,
                              [['my_app_maint_2551@127.0.0.1',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または他の環境のリリースも作成できるはずです。そのため、不足している部分が両方の環境に影響を与える可能性があります。

前もって感謝します!

4

4 に答える 4

2

私には、 ( envdevではなく) 環境でリリースを作成していることが問題のようです。prod

この部分:

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

(Erlang のように恐ろしく、恐ろしくも) エラー メッセージの 1 つは、基本的にそれMix.Project.config/0が未定義であることを示しています。Mix はリリースには含まれていませんが、Phoenix は、通常は本番環境では実行しないコード リローダーで使用していると思います。

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

于 2015-10-24T10:11:28.197 に答える
1

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

私はあなたのプロジェクトを複製してdevリリースを生成しましたが、あなたと同じ失敗をしています。ビルドを使用した個人的なプロジェクトの多くで、これと同じ失敗がありましたdev。ただし、prodビルドは常に機能します。

したがって、正しい情報を含む を配置し、ファイルにconfig/prod.secret.exsを追加すると、prod リリースを生成して を正常に実行できます。ホットコードリローダーがビルドの犯人である可能性があると思われますが、エラーに存在することを除いて証拠はなく、vs .server: trueconfig/prod.exsconsolestartpingdevdevprod

ところで、アプリケーションを起動するときは、これはリリースであり、ミックスは再生されていないためではPORTなく、指定する必要があるだけです。MIX_ENV

PORT=4000 bin/my_app start

私のアドバイスは、ビルドをスキップして、ビルドdevのみを使用することです。サーバーがない場合は、https://exrm.readme.io/docs/deploymentでリリースをローカル マシンにデプロイできます。stagingprodstagingstaging

于 2015-11-03T19:53:06.490 に答える