Describe the bug

When an email address is set in a dynamic segment, the action gets stuck in executing

To Reproduce

Email API action with a dynamic email address:

the triggered emails are stuck in executing:

Expected behavior

It should either fail or execute

Additional context

Could be related to our recent API actions to sidekiq migration. Sidekiq retries 3 times before discarding jobs: https://github.com/restarone/violet_rails/blob/master/config/sidekiq.yml#L3 --

0

@alis-khadka @Pralish we should implement error tracking for sidekiq https://github.com/mperham/sidekiq/wiki/Error-Handling?source=post_page---------------------------#error-handlers

we are currently doing it via exception notification: https://github.com/restarone/violet_rails/blob/master/config/environments/staging.rb#L139-L151

0

@Pralish @alis-khadka I added exception notification for sidekiq jobs, here's the error that happens when the email is being parsed:

A SyntaxError occurred in background at 2022-08-23 19:26:39 UTC :

  (erb):3: unknown type of %string
...?name=".freeze; _erbout.<<((%20api_resource.properties%5B'na...
...                            ^~~
(erb):3: syntax error, unexpected end-of-input
...?name=".freeze; _erbout.<<((%20api_resource.properties%5B'na...
...                            ^~~
  /home/ubuntu/.rbenv/versions/2.6.6/lib/ruby/2.6.0/erb.rb:901:in `eval'

-------------------------------
Backtrace:
-------------------------------

  /home/ubuntu/.rbenv/versions/2.6.6/lib/ruby/2.6.0/erb.rb:901:in `eval'
  /home/ubuntu/.rbenv/versions/2.6.6/lib/ruby/2.6.0/erb.rb:901:in `result'
  /var/www/violet/releases/20220823191858/app/models/concerns/dynamic_attribute.rb:26:in `parse_dynamic_attribute'
  /var/www/violet/releases/20220823191858/app/models/concerns/dynamic_attribute.rb:53:in `block (2 levels) in attr_dynamic'
  /var/www/violet/releases/20220823191858/app/views/api_action_mailer/send_email.html.erb:7:in `_app_views_api_action_mailer_send_email_html_erb___2672076131284978545_46991628538720'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/base.rb:247:in `public_send'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/base.rb:247:in `_run'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/template.rb:154:in `block in render'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/notifications.rb:205:in `instrument'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/template.rb:345:in `instrument_render_template'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/template.rb:152:in `render'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/renderer/template_renderer.rb:61:in `block (2 levels) in render_template'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/notifications.rb:203:in `block in instrument'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/notifications.rb:203:in `instrument'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/renderer/template_renderer.rb:56:in `block in render_template'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/renderer/template_renderer.rb:75:in `render_with_layout'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/renderer/template_renderer.rb:55:in `render_template'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/renderer/template_renderer.rb:11:in `render'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/renderer/renderer.rb:61:in `render_template_to_object'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/renderer/renderer.rb:29:in `render_to_object'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/rendering.rb:117:in `block in _render_template'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/base.rb:273:in `in_rendering_context'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/rendering.rb:116:in `_render_template'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/rendering.rb:103:in `render_to_body'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionpack-6.1.5/lib/abstract_controller/rendering.rb:25:in `render'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/base.rb:958:in `block in collect_responses_from_templates'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/base.rb:955:in `each'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/base.rb:955:in `each'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/base.rb:955:in `map'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/base.rb:955:in `collect_responses_from_templates'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/base.rb:933:in `collect_responses'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/base.rb:841:in `mail'
  /var/www/violet/releases/20220823191858/app/mailers/api_action_mailer.rb:10:in `send_email'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionpack-6.1.5/lib/abstract_controller/base.rb:228:in `process_action'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionpack-6.1.5/lib/abstract_controller/callbacks.rb:42:in `block in process_action'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/callbacks.rb:117:in `block in run_callbacks'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actiontext-6.1.5/lib/action_text/rendering.rb:20:in `with_renderer'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actiontext-6.1.5/lib/action_text/engine.rb:59:in `block (4 levels) in <class:Engine>'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/callbacks.rb:126:in `instance_exec'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/callbacks.rb:126:in `block in run_callbacks'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/callbacks.rb:137:in `run_callbacks'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionpack-6.1.5/lib/abstract_controller/callbacks.rb:41:in `process_action'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionpack-6.1.5/lib/abstract_controller/base.rb:165:in `process'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/rescuable.rb:25:in `block in process'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/rescuable.rb:17:in `handle_exceptions'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/rescuable.rb:24:in `process'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionview-6.1.5/lib/action_view/rendering.rb:39:in `process'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/base.rb:615:in `block in process'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/notifications.rb:203:in `block in instrument'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/notifications.rb:203:in `instrument'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/base.rb:614:in `process'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/message_delivery.rb:128:in `block in processed_mailer'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/message_delivery.rb:127:in `tap'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/message_delivery.rb:127:in `processed_mailer'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/actionmailer-6.1.5/lib/action_mailer/message_delivery.rb:118:in `deliver_now'
  /var/www/violet/releases/20220823191858/app/models/api_action.rb:54:in `send_email'
  /var/www/violet/releases/20220823191858/app/models/api_action.rb:43:in `execute_action'
  /var/www/violet/releases/20220823191858/app/models/api_resource.rb:85:in `block (2 levels) in execute_model_context_api_actions'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activerecord-6.1.5/lib/active_record/relation/delegation.rb:88:in `each'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activerecord-6.1.5/lib/active_record/relation/delegation.rb:88:in `each'
  /var/www/violet/releases/20220823191858/app/models/api_resource.rb:84:in `block in execute_model_context_api_actions'
  /var/www/violet/releases/20220823191858/app/models/api_resource.rb:72:in `each'
  /var/www/violet/releases/20220823191858/app/models/api_resource.rb:72:in `execute_model_context_api_actions'
  /var/www/violet/releases/20220823191858/app/sidekiq/fire_api_actions_job.rb:11:in `block in perform'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/current_attributes.rb:188:in `set'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/current_attributes.rb:135:in `set'
  /var/www/violet/releases/20220823191858/app/sidekiq/fire_api_actions_job.rb:8:in `perform'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/processor.rb:196:in `execute_job'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/processor.rb:164:in `block (2 levels) in process'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/middleware/chain.rb:138:in `block in invoke'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/ros-apartment-sidekiq-1.2.0/lib/apartment/sidekiq/middleware/server.rb:5:in `block in call'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/ros-apartment-2.9.0/lib/apartment/adapters/abstract_adapter.rb:89:in `switch'
  /home/ubuntu/.rbenv/versions/2.6.6/lib/ruby/2.6.0/forwardable.rb:230:in `switch'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/ros-apartment-sidekiq-1.2.0/lib/apartment/sidekiq/middleware/server.rb:4:in `call'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/middleware/chain.rb:140:in `block in invoke'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/middleware/chain.rb:143:in `invoke'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/processor.rb:163:in `block in process'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/job_retry.rb:114:in `local'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/rails.rb:14:in `block in call'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/execution_wrapper.rb:91:in `wrap'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/reloader.rb:72:in `block in wrap'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/execution_wrapper.rb:91:in `wrap'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/activesupport-6.1.5/lib/active_support/reloader.rb:71:in `wrap'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/rails.rb:13:in `call'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/processor.rb:257:in `stats'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/job_logger.rb:13:in `call'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/job_retry.rb:81:in `global'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/processor.rb:124:in `block in dispatch'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/job_logger.rb:39:in `prepare'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/processor.rb:123:in `dispatch'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/processor.rb:162:in `process'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/processor.rb:78:in `process_one'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/processor.rb:68:in `run'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/util.rb:56:in `watchdog'
  /var/www/violet/shared/bundle/ruby/2.6.0/gems/sidekiq-6.4.1/lib/sidekiq/util.rb:65:in `block in safe_thread'
0

here lies the problem @Ayon95 -- it looks like your code got sanitized somehow (notice the extra characters). @Pralish @alis-khadka how can we prevent this from happening? It works intermittently.

0
© 2022 pullanswer.com - All rights reserved.