【问题标题】:rake task and action_mailer.default_url_optionsrake 任务和 action_mailer.default_url_options
【发布时间】:2018-02-07 17:55:09
【问题描述】:

当我尝试从 rake 任务中使用 ActionMailer 时,我收到了这个错误:

ActionView::Template::Error: 缺少要链接的主机!请提供 :host 参数、set default_url_options[:host]set :only_path 为 true

在我的development.rb 我有以下行:

config.action_mailer.default_url_options = { :host => 'localhost:3000' }

此外,如果我输入 development.rb 这个:

config.action_mailer.default_url_options[:host] = 'localhost:3000'

rake 任务工作正常,但服务器因此崩溃:

config/environments/development.rb:20:in block in ': undefined method []=' for nil:NilClass (NoMethodError)

如果我这样做:

config.action_mailer.default_url_options = {}
config.action_mailer.default_url_options[:host] = 'localhost:3000

rake 任务不再起作用。

我很困惑,有什么建议吗?

UPD 我认为这些代码不会有帮助,但就是这样,就这么简单:

耙任务:

 task :send_newsletter => :environment do
    Receiver.all.each { |receiver|
      NewsletterMailer.newsletter(receiver).deliver
    }
  end

邮寄者:

  def newsletter(receiver)
    @receiver = receiver

    mail(to: receiver.email, subject: "newsletter") do |format|
          format.html 
    end
  end

以及带有一些link_to xxx_url 行的视图,显然是导致错误的原因

红宝石版本 2.4.1

导轨 5.1.3

rake 12.0.0(但也尝试了 12.3.0 没有区别)

【问题讨论】:

  • 你能发布你的任务吗?
  • 什么版本的 Rails?

标签: ruby-on-rails ruby ruby-on-rails-5 rake rake-task


【解决方案1】:

试试下面的,应该可以的

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

更新

我不知道什么是理想的解决方案?但我已经测试过了,它对我有用

Rails.application.routes.default_url_options = config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

这也有效

Rails.application.routes.default_url_options = Rails.application.config.action_mailer.default_url_options

这个解决方案基于这个link

还有一个是

Rails.application.routes.default_url_options[:host] = '???'

这在每个环境文件中都有对应的主机名 - development.rbtest.rbproduction.rb(如果有的话,还有更多)

Based Link

希望对你有帮助

【讨论】:

  • 确保在更新 development.rb 文件后重新启动服务器
  • @RandomGuy 查看更新后的答案,如果不起作用,请告诉我,我将删除我的答案
【解决方案2】:

将此行添加到 rake 任务中已解决。基于fool-dev's答案

Rails.application.routes.default_url_options = Rails.application.config.action_mailer.default_url_options

【讨论】:

    猜你喜欢
    • 2017-10-04
    • 2013-06-15
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 2014-04-19
    • 2013-05-12
    相关资源
    最近更新 更多