繁体   English   中英

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

[英]Rails / Devise / Mailer: Throwing 'config.action_mailer.default_url_options' error on attempted registration

今天,这只是一个又一个问题。 我刚刚部署到生产服务器并对其进行了测试,只要涉及电子邮件,就会出现问题。 特别是使用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 正在被使用,但被完全忽略。 我尝试将主机更改为“ 127.0.0.1”,将服务器的IP addy更改为,但是没有。 将其扔到config / application.rb中,但不行。 我在项目中搜寻了其他任何声明default_url_options的行,但仅在production.rb文件中进行了设置。 我在Google上搜索了一个帖子,建议将config.cache_classes设置为false,但在那里也设置为false。

现在这是疯狂的事情……每当我尝试在项目中提交全新的评论时,我都会遇到相同的错误(如果您是初次评论者,则设置为发送电子邮件以确认电子邮件地址)。 我从production.rb文件中取出config.action_mailer ... etc,然后中提琴-我的评论邮件收发器正常工作并发送了电子邮件!

尽管如此,Devise绝对是固执己见,并不断向我抛出以上错误。 有什么想法吗? 顺便说一句,我所有的宝石都是最新的。 以下是我的production.rb文件。

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

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

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

当我尝试在测试数据库中进行测试时,我最终再次遇到了这个问题,并且一劳永逸地确定了我为什么会收到此错误,以及为什么没有其他人遇到这个错误(非常少) Google的结果)。

在彻底拆除项目并对其进行重构之后,我终于将问题定位到我已安装的Sitemap-generator插件中。 一旦删除了所有痕迹,上述错误终于停止了。

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

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

FatFreeCRM::Application.configure do

  ...

  ActionMailer::Base
end

我相信我已经解决了这个问题……尽管我不确定“是”什么原因。 我已经注释掉了,很可能是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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM