Rails / Devise / Mailer:在尝试注册时抛出'config.action_mailer.default_url_options'错误

时间:2011-04-10 04:21:22

标签: ruby-on-rails ruby devise sendmail mailer

今天只是一个接一个的问题。我刚刚部署到我的生产服务器并进行测试,只要有任何涉及电子邮件的问题。特别是对于Devise的可确认注册电子邮件,每当我注册一个帐户时,日志中都会出现以下错误...

ActionView::Template::Error (You can no longer call ActionMailer::Base.default_url_options directly. You need to set config.action_mailer.default_url_options. If you are using ActionMailer standalone, you need to include the routing url_helpers directly.):

查看我的config / environments / production.rb,我有以下设置...

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

所以正在使用config.action_mailer.default_url_options IS ,但完全被忽略了。我尝试将主机更改为'127.0.0.1'和我的服务器的IP addy,但它没有它。把它扔到config / application.rb中,但没有去。我在我的项目中寻找声明default_url_options的任何其他行,但它只在production.rb文件中设置。我用谷歌搜索并发现一篇帖子建议将config.cache_classes设置为false,但也有负面信息。

现在这就是疯狂的......每当我尝试在我的项目中提交一个全新的评论时,我都会遇到同样的错误(如果您是第一次评论员,请设置发送电子邮件确认电子邮件地址)。我从production.rb文件中取出了config.action_mailer ...等,而且中提琴 - 我的评论邮件工作并发送电子邮件就好了!

尽管如此,Devise仍然非常顽固,不断向我抛出上述错误。有什么想法吗?顺便说一下,我所有的宝石都是最新的。下面是我的production.rb文件。

--- 更新 ---------------

取得了一些进展,但这很奇怪。当我启动服务器并尝试执行将发送邮件(用户注册,注释)的操作时,我收到上面的ActionMailer :: Base错误消息。当我尝试AGAIN动作时......它可以工作并且邮件会被发送。从那时起(直到Passenger和/或服务器重新启动),所有邮件程序操作都可以正常工作。

但不是没有另一个问题(它永远不会结束)......由于某种原因,电子邮件正文是完全空白的。

3 个答案:

答案 0 :(得分:4)

当我尝试在测试数据库中进行测试时,我再次遇到了这个问题,我一劳永逸地确定了为什么我会收到这个错误,为什么没有其他人似乎遇到过它(谷歌的结果非常少)。

在彻底拆除我的项目并重建它之后,我终于将问题发现到我安装的Sitemap-generator插件中。一旦我删除了所有痕迹,上述错误终于停止了。

答案 1 :(得分:1)

我正在为Fat Free CRM解决这个问题,我意识到这个错误的发生是因为Rails 3延迟加载类。您需要做的就是在您的环境/ **。rb文件中“触摸”ActionMailer :: Base类,它将加载该类。然后你可以从控制器等调用ActionMailer :: Base.default_url_options(我们这样做,这样我们就可以从request.host_with_port自动设置邮件主机)

所以我的环境文件现在看起来像这样:

FatFreeCRM::Application.configure do

  ...

  ActionMailer::Base
end

答案 2 :(得分:0)

我相信我已经解决了这个问题......虽然我并不“完全”确定它做了什么。它很可能是我注释掉的config.cache_classes = true,虽然我担心这会影响我的网站缓存或其他东西,但它似乎没有破坏它。

此外,我通过从sendmail切换到:smtp来解决空的电子邮件正文。

这是我的最终production.rb文件,希望这可能对将来有类似问题的人有用。

MyProject::Application.configure do

  # Commented out, causes 'ActionView::Template' error
  #config.cache_classes = true

  config.whiny_nils = true

  config.consider_all_requests_local = true

  config.action_view.debug_rjs = true

  config.action_controller.perform_caching = true

  config.cache_store = :mem_cache_store

  config.active_support.deprecation = :log

  config.action_dispatch.best_standards_support = :builtin

  config.action_mailer.raise_delivery_errors = true

  Sunspot.config.solr.url = 'http://127.0.0.1:8080/solr'

  Paperclip.options[:command_path] = "/usr/bin/"

  config.action_mailer.perform_deliveries = true

  config.action_mailer.delivery_method = :smtp

  ActionMailer::Base.smtp_settings = {
    :address => "smtp.gmail.com",
    :enable_starttls_auto => true,
    :port => 587,
    :authentication => :plain,
    :user_name => "user@domain.com",
    :password => 'password'
  }

  config.action_mailer.default_url_options = { :host => 'dev.mydomain.com' }

  config.time_zone = "Central Time (US & Canada)"

end