簡體   English   中英

使用exrm崩潰運行Phoenix應用程序版本

[英]Running a Phoenix application release with exrm crashes

我正在嘗試使用exrm創建一個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 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或任何其他環境創建一個版本。 因此缺失的部分可能會影響兩種環境。

提前致謝!

對我來說,看起來問題是你在dev環境中創建了這個版本(而不是prod env)。

這部分:

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

(非常Mix.Project.config/0 )錯誤消息基本上表示Mix.Project.config/0未定義。 Mix不包含在發行版中,但我猜測Phoenix在其代碼重新加載器中使用它,您通常不會在生產中運行它。

嘗試使用MIX_ENV=prod生成版本,看看它是否有效。

我把它放在問題跟蹤器中,但這里也是為了后人:

您需要添加server: true到你prod.exs的配置下MyApp.Endpoint 這就是鳳凰城在一個版本中開始的方式。

對於Phoenix,我建議總是使用MIX_ENV=prod進行發布, MIX_ENV=dev有很多開發特定的功能(例如代碼重新加載),這些功能要么在發布版本內不起作用,要么不能按預期工作。

如果您遇到配置錯誤,可能是因為您在環境特定文件中缺少一些必需的Phoenix配置。 您可以通過運行MIX_ENV=prod mix compile來測試它,看它是否成功編譯。 您還可以使用--verbosity=verbose構建發布,以獲取用於跟蹤問題的詳細輸出。

您無法ping或控制該版本的原因是因為它在啟動時失敗。

@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與其中的正確信息放在一起並將server: true添加到我的config/prod.exs文件后,我能夠生成prod版本並執行consolestartping成功。 我懷疑熱代碼重新加載器可能是dev構建中的罪魁禍首,但沒有證據排除它出現在錯誤中,並且肯定是devprod不同的東西。

順便說一下,在啟動應用程序時,你只需要指定PORT ,而不是MIX_ENV因為這是一個發行版並且mix不在播放中:

PORT=4000 bin/my_app start

我的建議是跳過dev構建,只使用stagingprod構建。 如果您沒有staging服務器,則可以將staging版本部署到本地計算機la https://exrm.readme.io/docs/deployment

每@bitwalker建議,采用master分支exrm固定的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM