Create post with markdown date returns error 500

AI-generated summary

User nobodyfrm reports a 500 error when creating a post with a markdown date via API or frontend, traced to a moment.tz is not a function error in pretty_text.rb. pfaffman asks if it works in the UI and whether third-party plugins are involved. nobodyfrm confirms it fails in the frontend too and lists installed plugins and themes. nat asks for the Discourse version and notes the raw post formatting looks malformed, requesting a screenshot or video. nobodyfrm shares screenshots showing the date renders as quoted text, not a proper date widget. Later, nobodyfrm resolves the issue: some plugins were outdated because they’re now included in Discourse core; updating them fixed the problem. jdc20181 notes this may not apply to their case, as they updated Discourse recently and still face the error, referencing a similar issue on Discourse Meta.

Hi, when I try to create a post with markdown date i’ll get an error 500.

This error trigger via normal frontend post also!

What i’m doing wrong?

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'
i18n (1.14.7) lib/i18n.rb:353:in `with_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 `<main>'

Does it work if you do it from the UX? Do you have any third post party plugins?

no, it dont work from the normal user ux/frontend.

Plugins:

Name 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

Themes & Components

What Discourse version are you on?


Your post raw looks funky here. Can you confirm you wrote this

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]`”}’

Or share a video/screenshot of what you are typing in the composer.

your curl creates a post but the date is quoted text - not a date.

i found my mistake: Some plugins are now included in discourse core so the plugins was outdated.

After I fixed this it works as expected.

I am not sure if this is the solution for me since I have had it happen after updating Discourse thus, any core plugins should have updated with discourse in my case.

Reference my Post:

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

Someone referenced this one, but while I think its related, I don’t know if its 100% the same.