Zammad: ๋„ˆ๋ฌด ํฐ ๊ธฐ์‚ฌ ๋ณธ๋ฌธ์ด OTRS ๊ฐ€์ ธ ์˜ค๊ธฐ์— ์‹คํŒจ ํ•จ

์— ๋งŒ๋“  2018๋…„ 07์›” 01์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: zammad/zammad

์•ˆ๋…•ํ•˜์„ธ์š”,

https://github.com/zammad/zammad/issues/1467 ์™ธ์—๋„ OTRS ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ํฌ๊ธฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
(์˜ค๋ž˜๋œ ํ‹ฐ์ผ“์€ ๋‹ซ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค)

์ง๋ฌด:

zammad 2.5์—์„œ๋Š” OTRS ๋ฐ์ดํ„ฐ (~ 6000 ํ‹ฐ์ผ“.

๊ฒฐ๊ณผ:

1 :
WebGUI๋ฅผ ํ†ตํ•œ ๊ฐ€์ ธ ์˜ค๊ธฐ๊ฐ€ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž ์‹œ ํ›„ ๊ฐ€์ ธ ์˜ค๊ธฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ์ดˆ๊ณผ์™€ ๊ฐ™์€ ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?

์‹œ๋„ํ•ด๋ณด์‹ญ์‹œ์˜ค :
์ฝ˜์†”์„ ํ†ตํ•œ ๊ฐ€์ ธ ์˜ค๊ธฐ๊ฐ€ ๋” ์ข‹์•˜์ง€ ๋งŒ ๋‹ค์Œ ์˜ค๋ฅ˜ (์•„๋ž˜ ์˜ˆ์™ธ ์ฐธ์กฐ)์™€ ํ•จ๊ป˜ ๊ฑฐ๋Œ€ํ•œ ๋ณธ๋ฌธ (๋‚˜๋Š” ์ด๊ฒƒ์ด ์ฒจ๋ถ€ ํŒŒ์ผ์ด๋ผ๊ณ  ๊ฐ€์ •)์ด์žˆ๋Š” ํ‹ฐ์ผ“์—์„œ ๊ฐ€์ ธ ์˜ค๊ธฐ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฒˆ๋“ค exec ๋ ˆ์ผ c

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', true)
Setting.set ( 'system_init_done', false)
Import :: OTRS.start

์งˆ๋ฌธ :

  • ๊ฐ€์ ธ ์˜ค๊ธฐ ํ”„๋กœ์„ธ์Šค ์‹œ๊ฐ„ ๋™์•ˆ ์†Œ์Šค์˜ ๋ณธ๋ฌธ ์ œํ•œ์„ ๊ฐ„๋‹จํžˆ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋‚˜์ค‘์— ํ‹ฐ์ผ“์— ์•ก์„ธ์Šค ํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?
  • ์•„๋‹ˆ๋ฉด ๋‚˜๋จธ์ง€ ํ‹ฐ์ผ“ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์žฌ๊ฐœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
  • ๋‚˜๋Š” ๋„์ปค ์ž‘์„ฑ ๋ฒ„์ „์˜ zammad๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์ ธ ์˜ค๊ธฐ ๋ฌธ์„œ์—์„œ "Stop all Zammad process"๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ค‘์ง€ํ•ด์•ผํ•˜๋Š” ํ”„๋กœ์„ธ์Šค / ์ปจํ…Œ์ด๋„ˆ (ํŠนํžˆ Docker ๋ฒ„์ „์„ ์‚ฌ์šฉํ•  ๋•Œ)

์นœ์• ํ•˜๋Š”
MrDigit

์˜ˆ์™ธ ์ถ”์  :

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์— ํ•˜๋“œ ์ฝ”๋”ฉ๋˜๊ธฐ ๋•Œ๋ฌธ์—์ด ์˜ค๋ฅ˜๋Š” ์„ ํƒํ•œ DB ๋ฐฑ์—”๋“œ์™€ ๊ด€๊ณ„์—†์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
( ์ œํ•œ = 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)ํ•˜๊ณ  ์‹œ๋„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Zammad์— ์‚ฌ์šฉํ•  DB๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? MySQL ๋˜๋Š” postgresql? OTRS ๋ฒ„์ „์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @NeverMin ,

์ด๋ฏธ ํ•œ๋„๋ฅผ ๋” ๋†’์€ ๊ฐ€์น˜๋กœ ์˜ฌ๋ ธ๊ณ  ์ˆ˜์ž…์€ ๋‚˜์ค‘์— ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ์งˆ๋ฌธ์€ ์™œ ์ œํ•œ์ด 1,5 MByte๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋” ํฐ ๋ชธ์ฒด๊ฐ€ ์ €์žฅ๋˜๋ฉด zammad๊ฐ€ ํญ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋˜๋Š” ์ด๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์ž„์˜์˜ ๊ฐ’์ž…๋‹ˆ๊นŒ?

๊ท€ํ•˜์˜ ์งˆ๋ฌธ์— ๊ด€ํ•ด์„œ : ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” zammad์˜ docker-compose ๋ฒ„์ „ (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 MByte๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š”์ด ๊ฐ€์น˜๊ฐ€ ์˜ˆ์ „์ด๊ณ  ์•„๋งˆ๋„ ์“ธ๋ชจ๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊นŠ์ด ํŒŒ๊ณ  ๋“ค์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์—ฌ๊ธฐ์—์„œ ๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ์ž์„ธํžˆ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ OTRS ๊ฐ€์ ธ ์˜ค๊ธฐ์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์—ฌ๋Ÿฌ ์ง€์ ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์žฌํ˜„ํ•˜๋ ค๊ณ  ํ•  ๋•Œ 15000 ์ž๋ผ๋„ ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค (์ฐธ๊ณ  : UI๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์•„ ์—ฌ๊ธฐ์—์„œ API๋กœ ์ „ํ™˜ํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค).

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 ์‘๋‹ต์ด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Zammad๊ฐ€ ๋‚ด ํŽ˜์ด๋กœ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— API๋ฅผ ์œ„์˜ ์ œํ•œ๊นŒ์ง€ ๋ฐ€์–ด ๋„ฃ์„ ์ˆ˜๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

1500001 ๋ฌธ์ž (๋‚ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด๋ฏธ ๋„ˆ๋ฌด ์ข‹์•„ํ•˜์ง€ ์•Š์Œ)๋กœ ์‹œ๋„ํ•œ ํ›„ 15000 ๋ฌธ์ž (์ด ๊ฐ’์€ Zammad ๋‚ด์—์„œ ๋ถ™์—ฌ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ)๋กœ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ์‚ฌ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ง€๋ฉด ํŽ˜์ด์ŠคํŠธ ๋ณต์šฉ์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

1500001 ๋Š” 1.5MB๊ฐ€ ์•„๋‹ˆ๋ผ ์•ฝ 1.14MB๋กœ ์ œํ•œ๋„ ์—†์Šต๋‹ˆ๋‹ค. ์•ฝ 494320 ๋ฌธ์ž (์ผ๋ฐ˜ ํ…์ŠคํŠธ!)๋ฅผ ๋ถ™์—ฌ ๋„ฃ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚˜์ค‘์— ์ˆ˜๋™ ์ž…๋ ฅ์ด ๊ณ„์† ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ•œ ๊ณณ์—์„œ ๋” ํฐ ๊ฐ์‚ฌ๋ฅผ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์‹œ๋„ํ•˜๋Š” ๋™์•ˆ์ด ์ƒ์„ฑ๊ธฐ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. https://www.loremipsum.de/index_e.html

์•ˆ๋…•ํ•˜์„ธ์š”,
๋‚˜๋Š” ํ•œ๊ณ„๋ฅผ ๋น„๋‚œ ํ–ˆ๊ณ ์ด ๋ฌธ์ œ๊ฐ€ ํ•œ๊ณ„์˜ ์ด์œ ์ž…๋‹ˆ๋‹ค.
https://github.com/zammad/zammad/issues/1390

๋‚ด ์ชฝ์—์„œ 1.5MB๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ํฐ ๋‚ด์šฉ์€ ์–ด์จŒ๋“  ๋ฌธ์ œ๊ฐ€์—†๋Š” ๊ณณ์— ์ฒจ๋ถ€ ํŒŒ์ผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ๋ถ€๋”ช์ณค๋‹ค. ํ•œ ๊ณ ๊ฐ์ด docx๊ฐ€ ๋‚ด์žฅ ๋œ otrs ๊ธฐ์‚ฌ ๊ฐ€์ ธ ์˜ค๊ธฐ์— ์‹คํŒจํ•˜์—ฌ ๊ธฐ์‚ฌ๋ฅผ ๋ง๊ฐ€ ๋œจ ๋ ธ์Šต๋‹ˆ๋‹ค (35,000 ๊ฐœ ํ‹ฐ์ผ“ ์ค‘ 1 ๊ฐœ). ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ˜ํ…์ธ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฉ”์ผ ์„œ๋ฒ„ / ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „๋‹ฌํ•˜๋Š” ๋™์•ˆ ๊นจ๋œจ๋ฆฐ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

์ˆ˜์ž…์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝํ•˜๋ฏ€๋กœ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด 1.5MB๋กœ ์ž˜๋ผ์„œ ์ˆ˜์ž…ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ œํ•œ์„ 1.14MB-> 1.5MB๋กœ ์ˆ˜์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ ธ ์˜ค๊ธฐ๋Š” ์›ํ™œํ•˜๊ฒŒ ์‹คํ–‰๋˜๊ณ  ์˜ˆ์™ธ ๋ฐœ์ƒ์„ ๋ฐฉ์ง€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ธฐ์‚ฌ๋‹น 150 ๋งŒ ์ž๋กœ ์ œํ•œํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. @MrGeneration์ด ์ง€์ ํ–ˆ๋“ฏ์ด UI๋Š” ์–ด์จŒ๋“  (ํ›จ์”ฌ ์ ์€) ์–‘์˜ ๋ฌธ์ž ํ›„์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. MB / KB ์ธก๋ฉด์—์„œ ์‹ค์ œ ํฌ๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฌธ์ž ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์›๋ž˜ ๋ฌธ์ œ๋Š” ์ด์ œ ์ˆ˜์ •๋˜์—ˆ์œผ๋ฉฐ Zammad 3.5 ๐Ÿš€์—์„œ ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰