Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Strange issue on with 3.0, background jobs, Heroku and HTML email attachments #117

Closed
samstickland opened this issue Apr 23, 2016 · 7 comments
Assignees

Comments

@samstickland
Copy link

Hi,

After mime-types upgraded to 3.0 and brought mime-types-data 3.2016.0221 along with it I started getting errors from my Heroku background jobs (via delayed-job) when they try to send an email.

undefined method `type_for' for MIME::Types:Class

This was fired when we try to attach an HTML attachment via:

attachments.inline['logo.png'] = logo

I could not reproduce this locally, either via deliver_now or deliver_later + rake jobs:workoff

However locking mime-types to '<3' has 'fixed' the issue.

I'm not sure where to start investigating this, since I am having trouble reproducing anywhere except production (which is not the ideal test environment ;)

The same error message has been reported by someone else here: http://stackoverflow.com/questions/36709845/cannot-add-inline-attachment-with-actionmailer-in-rails-3 Although the circumstances are possibly a little different.

@halostatue halostatue self-assigned this Apr 23, 2016
@halostatue
Copy link
Member

I need more information than I have. At a minimum, I need a bigger backtrace, but that won’t probably be enough. Ideally, you can create a sample project that does this on a Heroku hobby project where we can add some deeper logging to figure out what’s going on. I remember seeing something that suggests Heroku hobby projects can have one hobby worker, and you can configure the mailer bits to send to a mail trap so that you’re not even sending accidental spam through this worker.

@samstickland
Copy link
Author

Sure. It will take me little time to create a sample project, but in the meantime, here is a bigger portion of the backtrace:

1
File "/app/vendor/bundle/ruby/2.3.0/gems/attr_encrypted-1.3.5/lib/attr_encrypted.rb" line 259 in method_missing
2
File "/app/vendor/bundle/ruby/2.3.0/gems/mail-2.6.4/lib/mail/attachments_list.rb" line 102 in set_mime_type
3
File "/app/vendor/bundle/ruby/2.3.0/gems/mail-2.6.4/lib/mail/attachments_list.rb" line 42 in []=
4
File "/app/app/mailers/timesheets_mailer.rb" line 16 in notify_approver_of_submission
- 123 non-project frames 
5
File "/app/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.5/lib/abstract_controller/base.rb" line 198 in process_action
6
File "/app/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.5/lib/abstract_controller/callbacks.rb" line 20 in block in process_action
7
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 88 in __run_callbacks__
8
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 778 in _run_process_action_callbacks
9
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 81 in run_callbacks
10
File "/app/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.5/lib/abstract_controller/callbacks.rb" line 19 in process_action
11
File "/app/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.5/lib/abstract_controller/base.rb" line 137 in process
12
File "/app/vendor/bundle/ruby/2.3.0/gems/actionview-4.2.5/lib/action_view/rendering.rb" line 30 in process
13
File "/app/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.5/lib/action_mailer/base.rb" line 596 in block in process
14
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/notifications.rb" line 164 in block in instrument
15
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/notifications/instrumenter.rb" line 20 in instrument
16
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/notifications.rb" line 164 in instrument
17
File "/app/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.5/lib/action_mailer/base.rb" line 593 in process
18
File "/app/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.5/lib/action_mailer/base.rb" line 584 in initialize
19
File "/app/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.5/lib/action_mailer/message_delivery.rb" line 25 in new
20
File "/app/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.5/lib/action_mailer/message_delivery.rb" line 25 in __getobj__
21
File "/app/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.5/lib/action_mailer/message_delivery.rb" line 34 in message
22
File "/app/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.5/lib/action_mailer/message_delivery.rb" line 85 in deliver_now
23
File "/app/vendor/bundle/ruby/2.3.0/gems/actionmailer-4.2.5/lib/action_mailer/delivery_job.rb" line 10 in perform
24
File "/app/vendor/bundle/ruby/2.3.0/gems/activejob-4.2.5/lib/active_job/execution.rb" line 32 in block in perform_now
25
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 117 in call
26
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 555 in block (2 levels) in compile
27
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 505 in call
28
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 498 in block (2 levels) in around
29
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 343 in block (2 levels) in simple
30
File "/app/vendor/bundle/ruby/2.3.0/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/active_job.rb" line 46 in perform
31
File "/app/vendor/bundle/ruby/2.3.0/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/active_job.rb" line 20 in block (3 levels) in <top (required)> 
32
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 441 in instance_exec
33
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 441 in block in make_lambda
34
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 342 in block in simple
35
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 497 in block in around
36
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 505 in call
37
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 498 in block (2 levels) in around
38
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 343 in block (2 levels) in simple
39
File "/app/vendor/bundle/ruby/2.3.0/gems/i18n-0.7.0/lib/i18n.rb" line 257 in with_locale
40
File "/app/vendor/bundle/ruby/2.3.0/gems/activejob-4.2.5/lib/active_job/translation.rb" line 7 in block (2 levels) in <module:Translation>
41
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 441 in instance_exec
42
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 441 in block in make_lambda
43
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 342 in block in simple
44
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 497 in block in around
45
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 505 in call
46
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 498 in block (2 levels) in around
47
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 343 in block (2 levels) in simple
48
File "/app/vendor/bundle/ruby/2.3.0/gems/activejob-4.2.5/lib/active_job/logging.rb" line 23 in block (4 levels) in <module:Logging>
49
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/notifications.rb" line 164 in block in instrument
50
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/notifications/instrumenter.rb" line 20 in instrument
51
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/notifications.rb" line 164 in instrument
52
File "/app/vendor/bundle/ruby/2.3.0/gems/activejob-4.2.5/lib/active_job/logging.rb" line 22 in block (3 levels) in <module:Logging>
53
File "/app/vendor/bundle/ruby/2.3.0/gems/activejob-4.2.5/lib/active_job/logging.rb" line 43 in block in tag_logger
54
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/tagged_logging.rb" line 68 in block in tagged
55
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/tagged_logging.rb" line 26 in tagged
56
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/tagged_logging.rb" line 68 in tagged
57
File "/app/vendor/bundle/ruby/2.3.0/gems/activejob-4.2.5/lib/active_job/logging.rb" line 43 in tag_logger
58
File "/app/vendor/bundle/ruby/2.3.0/gems/activejob-4.2.5/lib/active_job/logging.rb" line 19 in block (2 levels) in <module:Logging>
59
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 441 in instance_exec
60
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 441 in block in make_lambda
61
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 342 in block in simple
62
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 497 in block in around
63
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 505 in call
64
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 92 in __run_callbacks__
65
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 778 in _run_perform_callbacks
66
File "/app/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.5/lib/active_support/callbacks.rb" line 81 in run_callbacks
67
File "/app/vendor/bundle/ruby/2.3.0/gems/activejob-4.2.5/lib/active_job/execution.rb" line 31 in perform_now
68
File "/app/vendor/bundle/ruby/2.3.0/gems/activejob-4.2.5/lib/active_job/execution.rb" line 21 in execute
69
File "/app/vendor/bundle/ruby/2.3.0/gems/activejob-4.2.5/lib/active_job/queue_adapters/delayed_job_adapter.rb" line 34 in perform

@halostatue
Copy link
Member

Thanks. I have also commented on the SO thread indicating that downgrading isn’t the right answer and asking that poster for more information on this bug. I think that this is an Other bug (I say upstream in my comment, but I guess it’s actually downstream from mime-types…), because I didn’t change any of that code, but I can’t figure out why downgrading to 2.x would make a difference.

@halostatue
Copy link
Member

Hi. Are you able to share your Gemfile, especially if you have a line for mime-types? I think that I have a clue as to what is happening.

halostatue added a commit that referenced this issue May 22, 2016
*   3 bug fixes

    *   A test for MIME::Types::Cache fails under Ruby 2.3 because of frozen
        strings #118. This has been fixed.

    *   The JSON data has been incorrectly encoded since the release of
        mime-types 3 on the +xrefs+ field, because of the switch to using a Set
        to store cross-reference information. This has been fixed.

    *   A tentative fix for #117 has been applied, removing the only circular
        require dependencies that exist (and for which there was code to
        prevent, but the current fix is simpler). I have no way to verify this
        fix and depending on how things are loaded by `delayed_job`, this fix
        may not be sufficient.

*   1 governance change

    *   Updated to Contributor Covenant 1.4.
halostatue added a commit that referenced this issue May 22, 2016
*   3 bug fixes

    *   A test for MIME::Types::Cache fails under Ruby 2.3 because of frozen
        strings #118. This has been fixed.

    *   The JSON data has been incorrectly encoded since the release of
        mime-types 3 on the +xrefs+ field, because of the switch to using a Set
        to store cross-reference information. This has been fixed.

    *   A tentative fix for #117 has been applied, removing the only circular
        require dependencies that exist (and for which there was code to
        prevent, but the current fix is simpler). I have no way to verify this
        fix and depending on how things are loaded by `delayed_job`, this fix
        may not be sufficient.

*   1 governance change

    *   Updated to Contributor Covenant 1.4.
halostatue added a commit that referenced this issue May 22, 2016
*   3 bug fixes

    *   A test for MIME::Types::Cache fails under Ruby 2.3 because of frozen
        strings #118. This has been fixed.

    *   The JSON data has been incorrectly encoded since the release of
        mime-types 3 on the +xrefs+ field, because of the switch to using a Set
        to store cross-reference information. This has been fixed.

    *   A tentative fix for #117 has been applied, removing the only circular
        require dependencies that exist (and for which there was code to
        prevent, but the current fix is simpler). I have no way to verify this
        fix and depending on how things are loaded by `delayed_job`, this fix
        may not be sufficient.

*   1 governance change

    *   Updated to Contributor Covenant 1.4.
@halostatue
Copy link
Member

Hi, @samstickland. At your earliest convenience, can you try this again with mime-types 3.1? The only thing I can guess is that somehow mime-types was partially loading for your background jobs, but somehow not getting through lib/mime/types/registry.rb, which is where I moved the class methods when I released mime-types 3. I had some code that called out as problematic (it was done to fix a circular require that happened because I made columnar loading the default.

I have changed how all this loads so that there’s no guard clauses for circular requires now, just smarter loading in general.

@samstickland
Copy link
Author

Hi,

I've just tried this with 3.1 and emails are now sent correctly from the background job!

Thanks for your help :)

@halostatue
Copy link
Member

Glad that this worked out. I have put a comment on the SO issue as well.

jsonn pushed a commit to jsonn/pkgsrc that referenced this issue Oct 15, 2016
== 3.1 / 2016-05-22

* 1 documentation change:

  * Tim Smith (@tas50) updated the build badges to be SVGs to improve
    readability on high-density (retina) screens with pull request
    {#112}[mime-types/ruby-mime-types#112].

* 3 bug fixes

  * A test for MIME::Types::Cache fails under Ruby 2.3 because of frozen
    strings, {#118}[mime-types/ruby-mime-types#118].
    This has been fixed.

  * The JSON data has been incorrectly encoded since the release of mime-types
    3 on the +xrefs+ field, because of the switch to using a Set to store
    cross-reference information. This has been fixed.

  * A tentative fix for
    {#117}[mime-types/ruby-mime-types#117] has been
    applied, removing the only circular require dependencies that exist (and
    for which there was code to prevent, but the current fix is simpler).
    I have no way to verify this fix and depending on how things are loaded by
    +delayed_job+, this fix may not be sufficient.

* 1 governance change

  * Updated to {Contributor Covenant 1.4}[Code-of-Conduct_rdoc.html].
halostatue added a commit that referenced this issue Aug 12, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants