【问题标题】:Using Sidekiq with Mailer to send asynchronous emails [RAILS]使用带有 Mailer 的 Sidekiq 发送异步电子邮件 [RAILS]
【发布时间】:2014-07-16 04:05:01
【问题描述】:

所以我目前正在尝试使用 Rails gem 'sidekiq' 来异步发送大量电子邮件,因此不会拖慢下一页的加载时间。

除此之外,我所拥有的一切都有效:

FeedbackMailer.invite_contact(current_user, current_business, contact).deliver()

这是我自己的邮件程序和一组为客户创建电子邮件所必须使用的参数。

sidekiq 抛出的错误是这样的:

Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true

default_url_options[:host] 在 application.rb 中设置,但似乎没有在此处读取。我也尝试设置 only_path: true 并且仍然得到相同的错误。

当我在 sidekiq 的一名工作人员之外时,我可以发送电子邮件,问题只存在于那里。任何人都知道一种解决方法,以便可以从 sidekiq 的工作人员发送电子邮件?

另外,在您回答之前,使用 Mailer.delay 并不能真正解决我的问题,因为围绕邮件的许多其他代码必须在每次循环迭代期间关闭。

【问题讨论】:

    标签: ruby-on-rails sidekiq mailer


    【解决方案1】:

    当您的邮件配置不正确时会发生此错误。检查相关环境文件(production.rb 或 staging.rb)中是否有类似内容

    config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
      :address =>              'smtp.something.com',
      :port =>                  587,
      :domain =>               'yourdomain.com',
      :user_name =>            'account-admin@yourdomain.com',
      :password =>             'your secure password',
      :authentication =>       'plain',
      :enable_starttls_auto => true
    }
    

    【讨论】:

    • 这一切都在 Production.rb 中设置,除了 /app/workers 部分之外,它在应用程序的每个部分都可以正常工作。
    • 将redis的生产配置指向本地主机尝试rails runner -e production 'FeedbackWorker.perform_async(1,2,3)'然后RAILS_ENV=production sidekiq运行排队的工作。看看这是否有问题并提供更多信息
    • 也有可能“生产”sidekiq 没有在其部署的环境中以生产模式运行,因此将使用非生产配置。
    • 感谢您的宝贵时间,但最后我切换到 DelayedJob 并发现我可以以更简单的方式完成我的目标,并且没有遇到同样的问题。对于遇到此问题的其他人,我会说改用 DelayedJob 自定义作业,根据我的经验,一般来说更通用。
    • 需要明确的是,虽然DelayedJob 是一种易于设置并且仅依赖于数据库的东西,但它通常不是一个长期的解决方案。出于多种原因,sidekiq 是新(和现有)应用程序的最佳选择。
    猜你喜欢
    • 2015-05-16
    • 1970-01-01
    • 2012-08-02
    • 2013-05-21
    • 1970-01-01
    • 2015-08-23
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多