"Missing host to link to! Please provide the :host parameter"...但我_确实_提供了

"Missing host to link to! Please provide the :host parameter"... but I _did_ provide it

我读过其他人有同样问题的类似帖子,大多数人通过以下方式解决了问题:

config.action_mailer.default_url_options = { :host => '#.#.#.#'}

在他们的环境特定配置文件中。我已经这样做了,我也重新启动了我的服务器。

这是我的秘密。当我尝试从我的应用程序发送一封包含 link 的电子邮件时,我在我的发帖标题中收到错误消息(许多其他人也是如此)。然而,这只是我的暂存环境(和 Engine Yard 实例)的一个问题。我的开发环境(我的本地机器)工作正常。

在这两种情况下,我都将操作邮件程序配置为具有上述 default_url_option。对于我的开发环境,我的 :host 是 local:3000,对于我的暂存环境 (Engine Yard),我的 :host 是一个 IP 地址。

我想确保我的暂存环境确实将首选项加载到 ActionMailer 中,所以我 运行 在 rails 暂存控制台上这样做:

ActionMailer::Base.default_url_options

产生了:

{:host=>"[the staging ip address from the config file]"}

所以我知道它在里面!但我仍然得到 "Please provide the :host parameter".

有什么想法吗?

这是我了解到的:重新启动 服务器 与重新启动 Delayed Job 进程 不同,因此,任何新的除非重新启动,否则配置设置对延迟作业进程不可用。

在我使用以下方法在我的暂存服务器上手动重启延迟作业进程后:

bin/delayed_job restart

消息开始涌入。

快速提示:强制重试队列中失败的消息,一次一个,运行:

Delayed::Job.last.update_attributes(:attempts=>0, :run_at=>Time.now, :failed_at => nil, :locked_by=>nil, :locked_at=>nil)