Zammad: نص المقالة الكبير جدًا يفشل في استيراد OTRS

تم إنشاؤها على ١ يوليو ٢٠١٨  ·  9تعليقات  ·  مصدر: zammad/zammad

مرحبا،

بالإضافة إلى https://github.com/zammad/zammad/issues/1467 ما زلت لا أتخلى عن استيراد بيانات OTRS.
(أعتقد أنه يمكن إغلاق التذكرة القديمة)

مهمة:

مع zammad 2.5 حاول استيراد بيانات OTRS (حوالي 6000 تذكرة.

نتيجة:

جرب 1:
لم يكن الاستيراد عبر WebGUI ناجحًا ، وتوقفت عملية الاستيراد بعد مرور بعض الوقت. هل من الممكن أن يكون هناك شيء مثل المهلة؟

جرب 2:
كان الاستيراد عبر وحدة التحكم أفضل ، لكن فشل الاستيراد بتذكرة ذات جسم ضخم (أفترض أن هذا ملحق) مع الخطأ التالي (يرجى الاطلاع على الاستثناء أدناه). نفذ الأوامر التالية:

حزمة القضبان التنفيذية ج

Setting.set ('import_otrs_endpoint'، 'http://123.456.789.012/otrs/public.pl؟Action=ZammadMigrator')
Setting.set ('import_otrs_endpoint_key'، 'IhAvEaVeRySeCrEtKeY')
Setting.set ("import_mode" ، صحيح)
Setting.set ("system_init_done" ، خطأ)
استيراد :: OTRS.start

أسئلة:

  • هل يمكنني ببساطة رفع حد الجسم في المصدر لوقت عملية الاستيراد أم سأواجه مشاكل بعد ذلك عند الوصول إلى التذكرة؟
  • أم يمكن استئناف استيراد التذاكر المتبقية
  • أنا أستخدم نسختك من zammad. في مستندات الاستيراد تكتب "أوقف كل عمليات زمماد". ما هي العمليات / الحاويات التي يجب علي إيقافها (خاصة عند استخدام إصدار عامل الإرساء)

مع أطيب التحيات
السيد ديجيت

تتبع استثناءات:

W, [2018-07-01T12:58:20.356829 #76]  WARN -- : zammad-memcached:11211 failed (count: 0) RuntimeError: Already writing to socket
/opt/zammad/app/models/ticket/article.rb:301:in `check_body': body if article is to large, 3702347 chars - only 1500000 allowed (Exceptions::UnprocessableEntity)
        from /usr/local/bundle/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:413:in `block in make_lambda'
        from /usr/local/bundle/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:197:in `block (2 levels) in halting'
        from /usr/local/bundle/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:601:in `block (2 levels) in default_terminator'
        from /usr/local/bundle/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:600:in `catch'
        from /usr/local/bundle/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:600:in `block in default_terminator'
        from /usr/local/bundle/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:198:in `block in halting'
        from /usr/local/bundle/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:507:in `block in invoke_before'
        from /usr/local/bundle/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:507:in `each'
        from /usr/local/bundle/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:507:in `invoke_before'
        from /usr/local/bundle/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:130:in `run_callbacks'
        from /usr/local/bundle/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:827:in `_run_create_callbacks'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/callbacks.rb:340:in `_create_record'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/timestamp.rb:95:in `_create_record'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/persistence.rb:559:in `create_or_update'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/callbacks.rb:336:in `block in create_or_update'
        from /usr/local/bundle/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:131:in `run_callbacks'
        from /usr/local/bundle/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:827:in `_run_save_callbacks'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/callbacks.rb:336:in `create_or_update'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/persistence.rb:129:in `save'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/validations.rb:44:in `save'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/attribute_methods/dirty.rb:35:in `save'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/transactions.rb:308:in `block (2 levels) in save'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/transactions.rb:384:in `block in with_transaction_returning_status'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/connection_adapters/abstract/database_statements.rb:235:in `block in transaction'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/connection_adapters/abstract/transaction.rb:194:in `block in within_new_transaction'
        from /usr/local/lib/ruby/2.4.0/monitor.rb:214:in `mon_synchronize'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/connection_adapters/abstract/transaction.rb:191:in `within_new_transaction'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/connection_adapters/abstract/database_statements.rb:235:in `transaction'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/transactions.rb:210:in `transaction'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/transactions.rb:381:in `with_transaction_returning_status'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/transactions.rb:308:in `block in save'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/transactions.rb:323:in `rollback_active_record_state!'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/transactions.rb:307:in `save'
        from /usr/local/bundle/gems/activerecord-5.1.5/lib/active_record/suppressor.rb:42:in `save'
        from /opt/zammad/lib/import/otrs/article.rb:64:in `create'
        from /opt/zammad/lib/import/otrs/article.rb:49:in `create_or_update'
        from /opt/zammad/lib/import/otrs/article.rb:37:in `import'
        from /opt/zammad/lib/import/otrs/article.rb:31:in `initialize'
        from /opt/zammad/lib/import/base_factory.rb:35:in `new'
        from /opt/zammad/lib/import/base_factory.rb:35:in `create_instance'
        from /opt/zammad/lib/import/base_factory.rb:11:in `block in import_action'
        from /opt/zammad/lib/import/base_factory.rb:39:in `each'
        from /opt/zammad/lib/import/base_factory.rb:39:in `import_loop'
        from /opt/zammad/lib/import/base_factory.rb:9:in `import_action'
        from /opt/zammad/lib/import/otrs/ticket.rb:40:in `import'
        from /opt/zammad/lib/import/otrs/ticket.rb:30:in `initialize'
        from /opt/zammad/lib/import/base_factory.rb:35:in `new'
        from /opt/zammad/lib/import/base_factory.rb:35:in `create_instance'
        from /opt/zammad/lib/import/base_factory.rb:11:in `block in import_action'
        from /opt/zammad/lib/import/base_factory.rb:39:in `each'
        from /opt/zammad/lib/import/base_factory.rb:39:in `import_loop'
        from /opt/zammad/lib/import/base_factory.rb:9:in `import_action'
        from /opt/zammad/lib/import/otrs.rb:147:in `import_action'
        from /opt/zammad/lib/import/otrs.rb:137:in `imported?'
        from /opt/zammad/lib/import/otrs.rb:101:in `block (3 levels) in threaded_import'
        from /opt/zammad/lib/import/otrs.rb:95:in `loop'
        from /opt/zammad/lib/import/otrs.rb:95:in `block (2 levels) in threaded_import'
        from /usr/local/bundle/gems/logging-2.2.2/lib/logging/diagnostic_context.rb:474:in `block in create_with_logging_context'
bug import verified

ال 9 كومينتر

مرحبًا MrDigit ، أي DB واحد يجب استخدامه؟ أعتقد أنه محدود من DB ، انظر هذا السطر في السجل:

/opt/zammad/app/models/ticket/article.rb:301:in check_body': body if article is to large, 3702347 chars - only 1500000 allowed (Exceptions::UnprocessableEntity) from /usr/local/bundle/gems/activesupport-5.1.5/lib/active_support/callbacks.rb:413:inblock in make_lambda'

مرحبا NeverMin ،

نظرًا لأن الحد ثابت في article.rb هذا الخطأ بشكل مستقل عن الواجهة الخلفية لقاعدة البيانات المحددة.
( الحد = 1_500_000 ، انظر أدناه)

def check_body
    return true if body.blank?
    limit = 1_500_000
    current_length = body.length
    return true if body.length <= limit

    raise Exceptions::UnprocessableEntity, "body if article is to large, #{current_length} chars - only #{limit} allowed" if !ApplicationHandleInfo.postmaster?

    logger.warn "WARNING: cut string because of database length #{self.class}.body(#{limit} but is #{current_length})"
    self.body = body[0, limit]
end

مرحبًا MrDigit ، نعم ، يمكنك الإصلاح (على سبيل المثال 4_000_000) والمحاولة ، ولكن ، أي DB واحد لاستخدامه في Zammad؟ MySQL أم postgresql؟ ما هو إصدار OTRS؟

مرحبا NeverMin ،

رفعت بالفعل الحد إلى بعض القيمة الأعلى ، وعمل الاستيراد بعد ذلك. السؤال هو لماذا تم تعيين الحد الأقصى على 1.5 ميغا بايت؟ لأن زماد سوف ينفجر إذا تم تخزين أجساد أكبر أم أن هذه مجرد قيمة عشوائية؟

فيما يتعلق بأسئلتك: إن إصدار docker-compose من zammad الذي أستخدمه (https://github.com/zammad/zammad-docker-compose) يستخدم postgresql ، أنا أقوم بتخزين المرفقات في نظام الملفات. OTRS هو الإصدار 5.

مرحبًا @ MrDigit ، أسئلة جيدة ، ربما اسمحوا لي أن أسأل thorsteneckel .

JFI: https://github.com/zammad/zammad/blob/develop/db/migrate/20120101000010_create_ticket.rb#L175

تم تحريره:
هل يمكنك نقل هذه المشكلة إلى المجتمع ؟

مرحبا @ MrDigit

السؤال هو لماذا تم تعيين الحد الأقصى على 1.5 ميغا بايت؟

أعتقد أن هذه القيمة قديمة وربما عفا عليها الزمن. شكرًا لك على التعمق في هذا الأمر وحل مشكلتك ومشاركتها هنا. سنلقي نظرة فاحصة عند معالجة هذه المسألة.

لا يقتصر هذا على استيراد OTRS فقط.
هذا سوف يضرب في عدة نقاط.

عند محاولة إعادة إنتاج هذا ، حتى مع وجود 15000 حرفًا ، سأستمر في تلقي الأخطاء (ملاحظة: كان علي التبديل إلى واجهة برمجة التطبيقات هنا لأن واجهة المستخدم الخاصة بنا لم تعجبها):

F, [2019-07-03T16:36:15.330582 #18433-86302140] FATAL -- :
F, [2019-07-03T16:36:15.330620 #18433-86302140] FATAL -- : actionpack (5.1.7) lib/action_dispatch/http/parameters.rb:115:in `rescue in parse_formatted_parameters'
actionpack (5.1.7) lib/action_dispatch/http/parameters.rb:109:in `parse_formatted_parameters'
actionpack (5.1.7) lib/action_dispatch/http/request.rb:361:in `block in POST'
rack (2.0.7) lib/rack/request.rb:59:in `fetch'
rack (2.0.7) lib/rack/request.rb:59:in `fetch_header'
actionpack (5.1.7) lib/action_dispatch/http/request.rb:360:in `POST'
actionpack (5.1.7) lib/action_dispatch/http/parameters.rb:53:in `parameters'
actionpack (5.1.7) lib/action_dispatch/http/filter_parameters.rb:41:in `filtered_parameters'
actionpack (5.1.7) lib/action_controller/metal/instrumentation.rb:21:in `process_action'
actionpack (5.1.7) lib/action_controller/metal/params_wrapper.rb:252:in `process_action'
activerecord (5.1.7) lib/active_record/railties/controller_runtime.rb:22:in `process_action'
actionpack (5.1.7) lib/abstract_controller/base.rb:124:in `process'
actionview (5.1.7) lib/action_view/rendering.rb:30:in `process'
actionpack (5.1.7) lib/action_controller/metal.rb:189:in `dispatch'
actionpack (5.1.7) lib/action_controller/metal.rb:253:in `dispatch'
actionpack (5.1.7) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
actionpack (5.1.7) lib/action_dispatch/routing/route_set.rb:31:in `serve'
actionpack (5.1.7) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (5.1.7) lib/action_dispatch/journey/router.rb:33:in `each'
actionpack (5.1.7) lib/action_dispatch/journey/router.rb:33:in `serve'
actionpack (5.1.7) lib/action_dispatch/routing/route_set.rb:844:in `call'
omniauth (1.9.0) lib/omniauth/strategy.rb:192:in `call!'
omniauth (1.9.0) lib/omniauth/strategy.rb:169:in `call'
omniauth (1.9.0) lib/omniauth/strategy.rb:192:in `call!'
omniauth (1.9.0) lib/omniauth/strategy.rb:169:in `call'
omniauth (1.9.0) lib/omniauth/strategy.rb:192:in `call!'
omniauth (1.9.0) lib/omniauth/strategy.rb:169:in `call'
omniauth (1.9.0) lib/omniauth/strategy.rb:192:in `call!'
omniauth (1.9.0) lib/omniauth/strategy.rb:169:in `call'
omniauth (1.9.0) lib/omniauth/strategy.rb:192:in `call!'
omniauth (1.9.0) lib/omniauth/strategy.rb:169:in `call'
omniauth (1.9.0) lib/omniauth/strategy.rb:192:in `call!'
omniauth (1.9.0) lib/omniauth/strategy.rb:169:in `call'
omniauth (1.9.0) lib/omniauth/strategy.rb:192:in `call!'
omniauth (1.9.0) lib/omniauth/strategy.rb:169:in `call'
omniauth (1.9.0) lib/omniauth/strategy.rb:192:in `call!'
omniauth (1.9.0) lib/omniauth/strategy.rb:169:in `call'
omniauth (1.9.0) lib/omniauth/strategy.rb:192:in `call!'
omniauth (1.9.0) lib/omniauth/strategy.rb:169:in `call'
omniauth (1.9.0) lib/omniauth/builder.rb:64:in `call'
rack (2.0.7) lib/rack/etag.rb:25:in `call'
rack (2.0.7) lib/rack/conditional_get.rb:38:in `call'
rack (2.0.7) lib/rack/head.rb:12:in `call'
rack (2.0.7) lib/rack/session/abstract/id.rb:232:in `context'
rack (2.0.7) lib/rack/session/abstract/id.rb:226:in `call'
actionpack (5.1.7) lib/action_dispatch/middleware/cookies.rb:613:in `call'
actionpack (5.1.7) lib/action_dispatch/middleware/callbacks.rb:26:in `block in call'
activesupport (5.1.7) lib/active_support/callbacks.rb:97:in `run_callbacks'
actionpack (5.1.7) lib/action_dispatch/middleware/callbacks.rb:24:in `call'
actionpack (5.1.7) lib/action_dispatch/middleware/debug_exceptions.rb:59:in `call'
actionpack (5.1.7) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
railties (5.1.7) lib/rails/rack/logger.rb:36:in `call_app'
railties (5.1.7) lib/rails/rack/logger.rb:24:in `block in call'
activesupport (5.1.7) lib/active_support/tagged_logging.rb:69:in `block in tagged'
activesupport (5.1.7) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (5.1.7) lib/active_support/tagged_logging.rb:69:in `tagged'
railties (5.1.7) lib/rails/rack/logger.rb:24:in `call'
actionpack (5.1.7) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
actionpack (5.1.7) lib/action_dispatch/middleware/request_id.rb:25:in `call'
rack (2.0.7) lib/rack/method_override.rb:22:in `call'
rack (2.0.7) lib/rack/runtime.rb:22:in `call'
activesupport (5.1.7) lib/active_support/cache/strategy/local_cache_middleware.rb:27:in `call'
actionpack (5.1.7) lib/action_dispatch/middleware/executor.rb:12:in `call'
actionpack (5.1.7) lib/action_dispatch/middleware/static.rb:125:in `call'
rack (2.0.7) lib/rack/sendfile.rb:111:in `call'
railties (5.1.7) lib/rails/engine.rb:522:in `call'
railties (5.1.7) lib/rails/railtie.rb:185:in `public_send'
railties (5.1.7) lib/rails/railtie.rb:185:in `method_missing'
puma (3.12.1) lib/puma/configuration.rb:227:in `call'
puma (3.12.1) lib/puma/server.rb:660:in `handle_request'
puma (3.12.1) lib/puma/server.rb:474:in `process_client'
puma (3.12.1) lib/puma/server.rb:334:in `block in run'
puma (3.12.1) lib/puma/thread_pool.rb:135:in `block in spawn_thread'
logging (2.2.2) lib/logging/diagnostic_context.rb:474:in `block in create_with_logging_context'

استجابة API فارغة.

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

لقد حاولت باستخدام أحرف 1500001 (والتي لم يعجبها المستعرض الخاص بي كثيرًا بالفعل) وبعد ذلك باستخدام عدد أقل من 15000 الأحرف (هذه القيمة قابلة للصق داخل Zammad). لكن مرة أخرى ، إذا أصبحت المقالة كبيرة جدًا ، فستتوقف عن أخذ المعاجين.

ومع ذلك ، فإن 1500001 ليس 1.5 ميغا بايت ، بل حوالي 1.14 ميغا بايت وهو ليس الحد الأقصى. يمكنني لصق حوالي 494320 حرفًا (نص عادي!) ، وبعد ذلك لا تزال الكتابة اليدوية تعمل. شكرا جزيلا حيث لم تكن ناجحة.

لقد استخدمت هذا المولد أثناء محاولاتي: https://www.loremipsum.de/index_e.html

أهلا،
ألقي باللوم على الحد وهذه المشكلة هي سبب الحد:
https://github.com/zammad/zammad/issues/1390

من جانبي 1.5 ميغابايت على ما يرام ... عادةً ما يتم التعامل مع المحتويات الأكبر في المرفقات على أي حال حيث لا توجد مشكلة.

واجهتني نفس المشكلة. كان لدى العميل عملية استيراد فاشلة لمقالات otrs مع ملف docx مضمن مما أدى إلى كسر المقالة (1 من 35 ألف تذكرة). لا يوجد محتوى قابل للاستخدام ، يبدو أن خادم البريد / العميل كسره أثناء التسليم.

سوف أقوم بتغيير الاستثناء بحيث لا يحدث على الواردات ، لذلك سيتم استيراد المواد عن طريق قصها إلى 1.5 ميغا بايت كما هو الحال في حالات أخرى. يجب علينا أيضًا تحديد الحد من 1.14 ميجابايت -> 1.5 ميجابايت. يجب أن يعمل الاستيراد بسلاسة ويمنع زيادة الاستثناءات.

قررنا الاحتفاظ بحد 1.5 مليون حرف لكل مقالة. كما أشار MrGeneration إلى أن واجهة المستخدم غير قابلة للاستخدام بعد (أقل بكثير) من الأحرف على أي حال. لم يكن الأمر يتعلق بالحجم الفعلي من حيث MB / KB ولكن عدد الأحرف. ومع ذلك ، تم إصلاح الإصدار الأصلي الآن وسيكون جاهزًا للاستخدام مع Zammad 3.5

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات