2015-10-24 3 views
5

मैं exrm का उपयोग कर स्टॉक Phoenix एप्लिकेशन (एलिक्सीर और एर्लांग पर आधारित) की एक रिलीज बनाने की कोशिश कर रहा हूं।एक्सआरएम दुर्घटनाओं के साथ फीनिक्स एप्लिकेशन रिलीज चलाना

dev मिश्रण पर्यावरण के लिए पहली रिलीज ठीक बनाई गई है, लेकिन ./rel/my_app/bin/my_app console का उपयोग करते समय क्रैश हो जाती है। यह एक Vagrant/वर्चुअल बॉक्स आभासी मशीन के अंदर उबंटू 14.04 चल रहा है।

मेरे मैक पर, वही सेटअप ठीक चलाता है। दुर्भाग्यवश, मुझे एक ही आर्किटेक्चर के साथ एक मशीन पर रिलीज बनाने की जरूरत है जो लक्ष्य सर्वर के रूप में है, जो उबंटू चलाएगा।

आप यहां आवेदन कर सकते हैं: https://github.com/mavenastic/my_app। इसमें निर्भरताओं को स्थापित करने और वीएम पर परियोजना बनाने के लिए किए गए कदम शामिल हैं (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,[]]}}}"} 

संपादित करें:

मैं MIX_ENV=prod mix release साथ साथ ही उत्पादन वातावरण के लिए एक रिलीज बनाने की कोशिश की

यहाँ त्रुटि मैं सांत्वना चलाने का प्रयास से मिलता है। रिलीज सफलतापूर्वक जेनरेट किया गया है और MIX_ENV=prod PORT=8889 ./rel/my_app/bin/my_app console ठीक चलाता है। हालांकि, मैं सर्वर को पिंग नहीं कर सकता और न ही इसे शुरू होने के बाद रिमोट कंसोल चला सकता है, इसलिए ऐसा लगता है कि एप्लिकेशन को ठीक से चलाने के लिए अभी भी कुछ याद आ रही है।

$ 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

प्रति @bitwalker सुझाव exrm की master शाखा का उपयोग करते हुए इस मुद्दे को हल किया गया।

2

मेरे लिए ऐसा लगता है कि समस्या यह है कि आप अपने dev पर्यावरण (prod env के बजाय) में रिलीज बना रहे हैं।

इस भाग:

{undef,[{'Elixir.Mix.Project',config,[],[]} 
की (बहुत और अद्भुत रूप ला Erlang) त्रुटि संदेश

मूल रूप से कहा गया है कि Mix.Project.config/0 अनिर्धारित रहता है। मिक्स रिलीज़ में शामिल नहीं है लेकिन मुझे लगता है कि फीनिक्स इसे अपने कोड रीलोडर में उपयोग करता है, जिसे आप आम तौर पर उत्पादन में नहीं चलाते हैं।

MIX_ENV=prod के साथ रिलीज उत्पन्न करने का प्रयास करें और देखें कि यह काम करता है या नहीं।

+0

आपके उत्तर @whatyouhide के लिए धन्यवाद। जो मैं समझता हूं, उससे मुझे 'देव' पर्यावरण के लिए एक रिलीज बनाने में सक्षम होना चाहिए, [यहां] देखें (http://hashnuke.com/2015/07/19/convenience-hacks-for-using-exrm-with -phoenix-apps.html)। मैं 'प्रोड' के लिए रिलीज बनाने की कोशिश करूंगा और आपको परिणाम बता दूंगा। – mavenastic

+0

कृपया मेरा संपादन @whatyouhide देखें। – mavenastic

1

मैं समस्या ट्रैकर में इस डाल, लेकिन सिर्फ यहाँ भावी पीढ़ी के लिए भी:

आप MyApp.Endpoint के लिए config के तहत अपने prod.exs को server: true जोड़ने की जरूरत है। इस तरह फीनिक्स खुद को रिलीज के भीतर शुरू करता है।

फीनिक्स के साथ, मैं हमेशा MIX_ENV=prod रिलीज के लिए का उपयोग कर की सिफारिश करेंगे, MIX_ENV=dev (जैसे कोड को फिर से लोड के रूप में) विकास विशिष्ट सुविधाओं का एक बहुत कुछ है, जो या तो एक रिलीज में कार्य नहीं करेंगी, या अपेक्षा के अनुरूप काम नहीं होगा।

यदि आपको कॉन्फ़िगरेशन त्रुटियां मिल रही हैं, तो शायद यह है क्योंकि आप अपने पर्यावरण-विशिष्ट फ़ाइल में कुछ आवश्यक फीनिक्स कॉन्फ़िगरेशन खो रहे हैं।यह देखने के लिए कि क्या यह सफलतापूर्वक संकलित है, आप MIX_ENV=prod mix compile चलाकर इसका परीक्षण कर सकते हैं। समस्याओं का पता लगाने के लिए विस्तृत आउटपुट प्राप्त करने के लिए आप --verbosity=verbose के साथ अपनी रिलीज भी बना सकते हैं।

रिलीज के लिए आप पिंग या कंसोल नहीं कर सकते हैं क्योंकि यह स्टार्टअप पर विफल रहा है।

+0

धन्यवाद @bitwalker। 'सर्वर: सत्य' जोड़ना दुर्भाग्य से समस्या का समाधान नहीं करता है। यह कुछ स्पष्ट हो सकता है जो मुझे याद आ रही है। मैंने इस मुद्दे को अद्यतन किया [गीथूब पर] (https://github.com/bitwalker/exrm/issues/218), समाधान मिलने पर इस पोस्ट को अपडेट करेगा। – mavenastic

+0

कोई विचार क्यों यह डिफ़ॉल्ट रूप से सेट नहीं है? –

1

@bitwalker आपकी config/prod.exs फ़ाइल में सही है, आपको server: true ला ला http://www.phoenixframework.org/v0.13.1/docs/advanced-deployment जोड़ना होगा।

मैंने आपकी परियोजना को क्लोन किया और dev रिलीज उत्पन्न किया और आपको वही विफलता मिल रही है। मुझे dev बिल्ड के साथ मेरी कई निजी परियोजनाओं पर भी यही विफलता मिली है। हालांकि, prod बिल्ड हमेशा काम करता है।

इस प्रकार, यह में सही जानकारी के साथ एक config/prod.secret.exs जगह में डाल और मेरे config/prod.exs फाइल करने के लिए server: true जोड़ने के बाद, मैं एक prod रिहाई पैदा करते हैं और सफलतापूर्वक निष्पादित console, start और ping कर रहा हूँ। मुझे संदेह है कि हॉट कोड रीलोडर dev बिल्ड में अपराधी हो सकता है लेकिन इसमें कोई सबूत नहीं है कि यह त्रुटि में मौजूद है और निश्चित रूप से dev बनाम prod के बारे में कुछ अलग है।

PORT=4000 bin/my_app start

मेरी सलाह है dev निर्माण को छोड़ने के लिए:

Btw, जब आवेदन शुरू करने, आप केवल PORT, नहीं MIX_ENV निर्दिष्ट करने के लिए के रूप में यह एक रिलीज है और मिश्रण खेल में नहीं है की जरूरत है और बस staging और prod बिल्ड का उपयोग करें। यदि आपके पास staging सर्वर नहीं है, तो आप staging को स्थानीय मशीन पर ला https://exrm.readme.io/docs/deployment पर तैनात कर सकते हैं।

+0

विस्तृत जानकारी @ जेसन-हैरेलसन के लिए धन्यवाद। मेरे नवीनतम परीक्षणों में, मैं केवल 'प्रोड' वातावरण का उपयोग कर रहा था इसलिए मुझे यकीन नहीं है कि यह अभी भी क्यों विफल रहा है। 'Exrm' की 'मास्टर' शाखा का उपयोग करके समस्या को हल किया गया। – mavenastic

संबंधित मुद्दे