Criar post com markdown via API retorna erro 500

Olá, quando tento criar uma postagem com data em markdown, recebo um erro 500.

Este erro é acionado também através da postagem normal no frontend!

O que estou fazendo de errado?

curl -X POST `https://forum.example.com/posts.json` -H “Api-Key: <myKey>” -H “Api-Username: nobodyfrm” -H “Content-Type: application/json” -d ‘{“topic_id”: 553,“raw”: “CSD Limburg 2025-05-10T00:00:00Z”}’```

Logs:

Message (11 copies reported)

MiniRacer::RuntimeError (TypeError: moment.tz is not a function)
lib/pretty_text.rb:238:in `eval'
lib/pretty_text.rb:238:in `block in markdown'
lib/pretty_text.rb:678:in `block in protect'
lib/pretty_text.rb:678:in `synchronize'
lib/pretty_text.rb:678:in `protect'
lib/pretty_text.rb:175:in `markdown'
lib/pretty_text.rb:301:in `cook'
app/models/post_analyzer.rb:30:in `cook'
app/models/post_analyzer.rb:149:in `cooked_stripped'
app/models/post_analyzer.rb:126:in `raw_links'
app/models/post_analyzer.rb:143:in `link_count'
app/models/post.rb:312:in `public_send'
app/models/post.rb:312:in `block (2 levels) in <class:Post>'
lib/validators/post_validator.rb:141:in `max_links_validator'
lib/validators/post_validator.rb:20:in `validate'
lib/post_creator.rb:179:in `valid?'
lib/post_creator.rb:187:in `create'
lib/new_post_manager.rb:321:in `perform_create_post'
lib/new_post_manager.rb:255:in `perform'
app/controllers/posts_controller.rb:218:in `block in create'
lib/distributed_memoizer.rb:16:in `block in memoize'
lib/distributed_mutex.rb:53:in `block in synchronize'
lib/distributed_mutex.rb:49:in `synchronize'
lib/distributed_mutex.rb:49:in `synchronize'
lib/distributed_mutex.rb:34:in `synchronize'
lib/distributed_memoizer.rb:12:in `memoize'
app/controllers/posts_controller.rb:217:in `create'
app/controllers/application_controller.rb:428:in `block in with_resolved_locale'
app/controllers/application_controller.rb:428:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:35:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:415:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:26:in `call'
lib/middleware/default_headers.rb:13:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/processing_request.rb:12:in `call'
lib/middleware/request_t...

Backtrace

lib/pretty_text.rb:238:in eval' lib/pretty_text.rb:238:in block in markdown’
lib/pretty_text.rb:678:in block in protect' lib/pretty_text.rb:678:in synchronize’
lib/pretty_text.rb:678:in protect' lib/pretty_text.rb:175:in markdown’
lib/pretty_text.rb:301:in cook' app/models/post_analyzer.rb:30:in cook’
app/models/post_analyzer.rb:149:in cooked_stripped' app/models/post_analyzer.rb:126:in raw_links’
app/models/post_analyzer.rb:143:in link_count' app/models/post.rb:312:in public_send’
app/models/post.rb:312:in block (2 levels) in <class:Post>' lib/validators/post_validator.rb:141:in max_links_validator’
lib/validators/post_validator.rb:20:in validate' lib/post_creator.rb:179:in valid?’
lib/post_creator.rb:187:in create' lib/new_post_manager.rb:321:in perform_create_post’
lib/new_post_manager.rb:255:in perform' app/controllers/posts_controller.rb:218:in block in create’
lib/distributed_memoizer.rb:16:in block in memoize' lib/distributed_mutex.rb:53:in block in synchronize’
lib/distributed_mutex.rb:49:in synchronize' lib/distributed_mutex.rb:49:in synchronize’
lib/distributed_mutex.rb:34:in synchronize' lib/distributed_memoizer.rb:12:in memoize’
app/controllers/posts_controller.rb:217:in create' actionpack (7.2.2.1) lib/action_controller/metal/basic_implicit_render.rb:8:in send_action’
actionpack (7.2.2.1) lib/abstract_controller/base.rb:226:in process_action' actionpack (7.2.2.1) lib/action_controller/metal/rendering.rb:193:in process_action’
actionpack (7.2.2.1) lib/abstract_controller/callbacks.rb:261:in block in process_action' activesupport (7.2.2.1) lib/active_support/callbacks.rb:121:in block in run_callbacks’
app/controllers/application_controller.rb:428:in block in with_resolved_locale' app/controllers/application_controller.rb:428:in with_resolved_locale’
activesupport (7.2.2.1) lib/active_support/callbacks.rb:130:in block in run_callbacks' activesupport (7.2.2.1) lib/active_support/callbacks.rb:141:in run_callbacks’
actionpack (7.2.2.1) lib/abstract_controller/callbacks.rb:260:in process_action' actionpack (7.2.2.1) lib/action_controller/metal/rescue.rb:27:in process_action’
actionpack (7.2.2.1) lib/action_controller/metal/instrumentation.rb:77:in block in process_action' activesupport (7.2.2.1) lib/active_support/notifications.rb:210:in block in instrument’
activesupport (7.2.2.1) lib/active_support/notifications/instrumenter.rb:58:in instrument' activesupport (7.2.2.1) lib/active_support/notifications.rb:210:in instrument’
actionpack (7.2.2.1) lib/action_controller/metal/instrumentation.rb:76:in process_action' actionpack (7.2.2.1) lib/action_controller/metal/params_wrapper.rb:259:in process_action’
activerecord (7.2.2.1) lib/active_record/railties/controller_runtime.rb:39:in process_action' actionpack (7.2.2.1) lib/abstract_controller/base.rb:163:in process’
actionview (7.2.2.1) lib/action_view/rendering.rb:40:in process' rack-mini-profiler (4.0.0) lib/mini_profiler/profiling_methods.rb:90:in block in profile_method’
actionpack (7.2.2.1) lib/action_controller/metal.rb:252:in dispatch' actionpack (7.2.2.1) lib/action_controller/metal.rb:335:in dispatch’
actionpack (7.2.2.1) lib/action_dispatch/routing/route_set.rb:67:in dispatch' actionpack (7.2.2.1) lib/action_dispatch/routing/route_set.rb:50:in serve’
actionpack (7.2.2.1) lib/action_dispatch/journey/router.rb:53:in block in serve' actionpack (7.2.2.1) lib/action_dispatch/journey/router.rb:133:in block in find_routes’
actionpack (7.2.2.1) lib/action_dispatch/journey/router.rb:126:in each' actionpack (7.2.2.1) lib/action_dispatch/journey/router.rb:126:in find_routes’
actionpack (7.2.2.1) lib/action_dispatch/journey/router.rb:34:in serve' actionpack (7.2.2.1) lib/action_dispatch/routing/route_set.rb:896:in call’
lib/middleware/omniauth_bypass_middleware.rb:35:in call' rack (2.2.17) lib/rack/tempfile_reaper.rb:15:in call’
rack (2.2.17) lib/rack/conditional_get.rb:40:in call' rack (2.2.17) lib/rack/head.rb:12:in call’
actionpack (7.2.2.1) lib/action_dispatch/http/permissions_policy.rb:38:in call' lib/content_security_policy/middleware.rb:12:in call’
lib/middleware/anonymous_cache.rb:415:in call' lib/middleware/csp_script_nonce_injector.rb:12:in call’
config/initializers/008-rack-cors.rb:26:in call' rack (2.2.17) lib/rack/session/abstract/id.rb:266:in context’
rack (2.2.17) lib/rack/session/abstract/id.rb:260:in call' actionpack (7.2.2.1) lib/action_dispatch/middleware/cookies.rb:704:in call’
actionpack (7.2.2.1) lib/action_dispatch/middleware/callbacks.rb:31:in block in call' activesupport (7.2.2.1) lib/active_support/callbacks.rb:101:in run_callbacks’
actionpack (7.2.2.1) lib/action_dispatch/middleware/callbacks.rb:30:in call' actionpack (7.2.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:31:in call’
actionpack (7.2.2.1) lib/action_dispatch/middleware/show_exceptions.rb:32:in call' logster (2.20.1) lib/logster/middleware/reporter.rb:40:in call’
lib/middleware/default_headers.rb:13:in call' railties (7.2.2.1) lib/rails/rack/logger.rb:41:in call_app’
railties (7.2.2.1) lib/rails/rack/logger.rb:29:in call' config/initializers/100-quiet_logger.rb:20:in call’
config/initializers/100-silence_logger.rb:29:in call' actionpack (7.2.2.1) lib/action_dispatch/middleware/request_id.rb:33:in call’
lib/middleware/enforce_hostname.rb:23:in call' rack (2.2.17) lib/rack/method_override.rb:24:in call’
actionpack (7.2.2.1) lib/action_dispatch/middleware/executor.rb:16:in call' rack (2.2.17) lib/rack/sendfile.rb:110:in call’
plugins/discourse-prometheus/lib/middleware/metrics.rb:14:in call' rack-mini-profiler (4.0.0) lib/mini_profiler.rb:191:in call’
lib/middleware/processing_request.rb:12:in call' message_bus (4.4.1) lib/message_bus/rack/middleware.rb:60:in call’
lib/middleware/request_tracker.rb:385:in call' actionpack (7.2.2.1) lib/action_dispatch/middleware/remote_ip.rb:96:in call’
railties (7.2.2.1) lib/rails/engine.rb:535:in call' railties (7.2.2.1) lib/rails/railtie.rb:226:in public_send’
railties (7.2.2.1) lib/rails/railtie.rb:226:in method_missing' rack (2.2.17) lib/rack/urlmap.rb:74:in block in call’
rack (2.2.17) lib/rack/urlmap.rb:58:in each' rack (2.2.17) lib/rack/urlmap.rb:58:in call’
unicorn (6.1.0) lib/unicorn/http_server.rb:634:in process_client' unicorn (6.1.0) lib/unicorn/http_server.rb:739:in worker_loop’
unicorn (6.1.0) lib/unicorn/http_server.rb:547:in spawn_missing_workers' unicorn (6.1.0) lib/unicorn/http_server.rb:143:in start’
unicorn (6.1.0) bin/unicorn:128:in <top (required)>' vendor/bundle/ruby/3.3.0/bin/unicorn:25:in load’
vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `’

Funciona se você fizer isso pela UX? Você tem algum plugin de terceiros?

Não, não funciona do UX/frontend normal do usuário.

Plugins:

Nome URL
Custom wizard Bump version · paviliondev/discourse-custom-wizard@6e1efdd · GitHub
Data explorer Build(deps-dev): Bump rack from 3.1.12 to 3.1.16 (#378) · discourse/discourse-data-explorer@d60c7ac · GitHub
Discourse-Kalender FIX: Destroy calendar popover on navigation (#761) · discourse/discourse-calendar@a034764 · GitHub
Docs Build(deps-dev): Bump rack from 3.1.12 to 3.1.16 (#211) · discourse/discourse-docs@17909a9 · GitHub
Footnote DEV: Add various APIs and outlets to the themes config area (#33385) · discourse/discourse@0ccf792 · GitHub
Journal Merge pull request #8 from fokx/main · paviliondev/discourse-journal@ecbd0ff · GitHub
Locations Merge pull request #127 from davidtaylorhq/raw-handlebars · merefield/discourse-locations@06048dc · GitHub
Prometheus bump rack from 3.1.15 to 3.1.16 (#150) · discourse/discourse-prometheus@a1e0ba6 · GitHub
Signatures Bump rack from 3.1.12 to 3.1.16 (#90) · discourse/discourse-signatures@c0d69bd · GitHub
Discourse Spoiler-Alarm DEV: Add various APIs and outlets to the themes config area (#33385) · discourse/discourse@0ccf792 · GitHub
Discourse – Folgen Bump rack from 3.1.12 to 3.1.16 (#153) · discourse/discourse-follow@240f7f9 · GitHub
Discourse – Gamifizierung Bump rack from 3.1.12 to 3.1.16 (#205) · discourse/discourse-gamification@178cb22 · GitHub
Discourse – Gelöst FIX: Check if user has existing solution despite trust_level=any for … · discourse/discourse-solved@0350b46 · GitHub
Discourse – Wer ist online? Bump rack from 3.1.12 to 3.1.16 (#131) · discourse/discourse-whos-online@7618335 · GitHub

Temas e Componentes

Qual versão do Discourse você está usando?


Sua postagem bruta parece estranha aqui. Você pode confirmar que escreveu isso

curl -X POST `https://forum.example.com/posts.json` \
-H “Api-Key: <myKey>” \
-H “Api-Username: nobodyfrm” \
-H “Content-Type: application/json” \
-d ‘{“topic_id”: 553,“raw”: “CSD Limburg  `` [date=2025-05-10]`”}’

Ou compartilhe um vídeo/captura de tela do que você está digitando no composer.

seu curl cria um post, mas a data é um texto entre aspas - não uma data.

encontrei meu erro: alguns plugins agora estão incluídos no core do discourse, então os plugins estavam desatualizados.

Depois que corrigi isso, funciona como esperado.

2 curtidas

Não tenho certeza se esta é a solução para mim, pois isso aconteceu depois de atualizar o Discourse, portanto, quaisquer plugins principais deveriam ter sido atualizados com o Discourse no meu caso.

Referência ao meu Post:

Internal Server Error - Time/Date Insert - Support - Discourse Meta

Alguém referenciou este, mas embora eu ache que está relacionado, não sei se é 100% o mesmo.