Olá,
além de https://github.com/zammad/zammad/issues/1467 Eu ainda não desisto de importar dados OTRS.
(Acho que o tíquete mais antigo pode ser fechado)
Tarefa:
Com zammad 2.5 tentei importar dados OTRS (~ 6000 tickets.
Resultado:
Experimente 1:
A importação via WebGUI não foi bem-sucedida, o processo de importação foi interrompido após algum tempo. É possível que haja algo como um tempo limite?
Tente 2:
A importação via console foi melhor, mas a importação falhou em um tíquete com um corpo enorme (presumo que seja um anexo) com o seguinte erro (consulte a exceção abaixo). Executou os seguintes comandos:
bundle exec rails 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
Questões:
Atenciosamente
MrDigit
Rastrear a exceção:
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'
Olá @MrDigit , Qual banco de dados usar? Acho que limitado do DB, veja esta linha no log:
/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'
Olá @NeverMin ,
como o limite é codificado em article.rb, esse erro é independente do back-end do banco de dados selecionado.
( limite = 1_500_000 , veja abaixo)
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
Olá @MrDigit , Sim, você pode consertar (por exemplo, 4_000_000) e tentar, mas, qual banco de dados usar para Zammad? MySQL ou postgresql? Qual é a versão OTRS?
Olá @NeverMin ,
já elevou o limite para algum valor superior, a importação funcionou depois. A questão é por que o limite está definido para 1,5 MByte? Porque zammad explodirá se corpos maiores forem armazenados ou isso é simplesmente um valor arbitrário?
Em relação às suas perguntas: A versão docker-compose do zammad que estou usando (https://github.com/zammad/zammad-docker-compose) está usando postgresql, estou armazenando os anexos no sistema de arquivos. OTRS é a versão 5.
Olá @MrDigit , Boas perguntas, talvez deixe-me perguntar para @thorsteneckel .
JFI: https://github.com/zammad/zammad/blob/develop/db/migrate/20120101000010_create_ticket.rb#L175
EDITADO:
Você pode mover este problema para a comunidade ?
Olá @MrDigit
A questão é por que o limite está definido para 1,5 MByte?
Acho que esse valor é antigo e provavelmente obsoleto. Obrigado por cavar tão fundo, resolver seu problema e compartilhá-lo aqui. Teremos uma análise mais detalhada ao abordar esse problema.
Isso não se limita apenas à importação OTRS.
Isso vai atingir vários pontos.
Ao tentar reproduzir isso, mesmo com 15.000 caracteres, continuarei recebendo erros (nota: tive que mudar para a API aqui porque nossa IU não gostou):
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'
A resposta da API está vazia.
Eu poderia, em nenhum momento, levar a API ao limite acima, pois Zammad não pegaria minhas cargas.
Tentei com 1500001
caracteres (que meu navegador já não gostou muito) e depois com menos 15000
caracteres (este valor pode ser colado no Zammad). Mas, novamente, se o artigo ficar muito grande, ele simplesmente parará de pegar as pastas.
1500001
entretanto não é 1,5 MB, mas sim cerca de 1,14 MB, o que nem é o limite. Eu poderia colar cerca de 494320
caracteres (texto simples!), Depois a digitação manual ainda funciona. Muito obrigado onde não foi bem sucedido.
Usei este gerador durante minhas tentativas: https://www.loremipsum.de/index_e.html
Oi,
Eu culpei o limite e este problema é a razão do limite:
https://github.com/zammad/zammad/issues/1390
Da minha parte, 1,5 MB está bem ... Normalmente, conteúdos maiores são manuseados em anexos de qualquer maneira onde não são problema.
Eu tive o mesmo problema. Um cliente teve uma falha na importação de artigo de outro com um docx incorporado que quebrou o artigo (1 de 35 mil tíquetes). Nenhum conteúdo utilizável, parecia que o servidor de e-mail / cliente o quebrou durante a entrega.
Alterarei a exceção para não ocorrer nas importações, de modo que os artigos serão importados cortando-a para 1,5 MB como nos outros casos. Também devemos fixar o limite de 1,14 MB -> 1,5 MB. A importação deve ocorrer sem problemas e evitar o levantamento de exceções.
Decidimos manter o limite de 1,5 milhão de caracteres por artigo. Como @MrGeneration apontou, a IU não pode ser usada após uma quantidade (muito menor) de caracteres. Nunca se tratou do tamanho real em termos de MB / KB, mas sim do número de caracteres. No entanto, o problema original foi corrigido e estará pronto para uso com o Zammad 3.5 🚀