سؤال

عندما أبدأ وظيفة داخل قذيفة ERL ، تعمل بشكل جيد. عندما أحاول استدعاء نفس الوظيفة مع وظيفة وحدة ERL ... -S ، فإنها تفشل.

سطر الكود الذي يفشل في النهاية هو:

start(Port) ->
    mochiweb_http:start([{port, Port}, {loop, fun dispatch_requests/1}]).

أنا متأكد من أن المنفذ يتم تعيينه بشكل صحيح. رسالة الخطأ الخاصة بي هي:

=CRASH REPORT==== 17-Jan-2010::00:21:09 ===
  crasher:
    initial call: mochiweb_socket_server:acceptor_loop/1
    pid: <0.65.0>
    registered_name: []
    exception exit: {error,closed}
      in function  mochiweb_socket_server:acceptor_loop/1
    ancestors: [mochiweb_http,<0.1.0>]
    messages: []
    links: []
    dictionary: []
    trap_exit: false
    status: running
    heap_size: 377
    stack_size: 24
    reductions: 93
  neighbours:

لقد جربت مصحح الأخطاء ويتيح لي أن أتخطى اليمين حتى يتم إعطاء خط الرمز أعلاه. بعد مرور ذلك ، يعطيني تقرير التحطم هذا.

أي مساعدة يحظى بتقدير كبير.

هل كانت مفيدة؟

المحلول

حسنًا ، أعتقد أن هذا يجب أن ينجح. هل يتم تجميع جميع الوحدات النمطية بنفس إصدار المترجم؟ IIRC قد تكون هناك أخطاء غريبة على مستوى المقبس إن لم يكن. راجع للشغل ، يمكنك الاتصال ببدء وظيفة نقطة الدخول الخاصة بك وهو الافتراضي لـ -s.

نصائح أخرى

بدلاً من ذلك يمكنك تجربة -eval اختيار:

erl -eval 'module:start(9090).'

عند استخدام -S ، يتم جمع الوسائط في قائمة ، وبالتالي سيتم إرفاق المنفذ بالفعل في قائمة. يمكنك التحقق من كلتا الحالتين (قائمة أو int) مع دالة غلاف (مثل start([Port])).

عندما تستخدم -S لتشغيل وظائف Erlang ، يتم وضع الوسائط في قائمة من ذرات. عندما تستخدم -run لتشغيل وظائف Erlang ، يتم وضع الوسائط في قائمة من سلاسل.

إذا كنت بحاجة إلى عدد صحيح قيمة لتمريرها ، ستحتاج إلى إجراء التحويلات المناسبة. إذا كنت ترغب في تغطية جميع الحالات ، فقد يساعد شيء من هذا القبيل:

start([Port]) when is_atom(Port) ->
    start([atom_to_list(Port)]);
start([Port]) when is_list(Port) ->
    start(list_to_integer(Port));
start(Port) when is_integer(Port) ->
    mochiweb_http:start([{port, Port}, {loop, fun dispatch_requests/1}]).

استشر صفحة الرجل إرل ("Erl -Man Erl") للحصول على التفاصيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top