当我尝试从rake任务中使用ActionMailer时,我收到此错误:
ActionView :: Template ::错误:缺少要链接的主机!请提供: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 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 我不认为代码会有所帮助,但就在这里,就是这么简单:
rake任务:
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
行的视图,显然导致了错误
ruby版本2.4.1
rails 5.1.3
rake 12.0.0(但也尝试了12.3.0没有区别)
答案 0 :(得分:0)
尝试以下操作
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.rb
,test.rb
和production.rb
(如果有的话,还有更多),每个环境文件中都有相应的主机名
希望它会有所帮助
答案 1 :(得分:0)
解决了这条线添加到rake任务。基于fool-dev's回答
Rails.application.routes.default_url_options = Rails.application.config.action_mailer.default_url_options