2011-04-10 109 views
1

今天只是一个又一个问题。我只是部署到我的生产服务器并进行测试,每当有任何事情涉及电子邮件时都会出现问题特别是随着设计的可证实的注册电子邮件,每当我注册了一个账号,抛出下面的错误了日志...Rails/Devise/Mailer:在尝试注册时抛出'config.action_mailer.default_url_options'错误

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.): 

在我的配置/环境/ production.rb看,我有下面的一组...

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

所以config.action_mailer.default_url_options IS被使用,但被完全忽略。我尝试将主机更改为“127.0.0.1”和我的服务器的IP地址,但它不会有。把它扔在config/application.rb中,但是不行。我在我的项目中寻找其他声明default_url_options的行,但它只在production.rb文件中设置。我谷歌搜索,并发现一篇文章,建议将config.cache_classes设置为false,但也是否定的。

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

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

--- UPDATE ---------------

取得了一点进步,但是这仅仅是怪异。当我启动服务器并尝试做一些将发送邮件(用户注册,评论)的东西时,我会看到上面的ActionMailer :: Base错误消息。当我再次尝试行动时...它工作并发送邮件。从那时起(直到Passenger和/或服务器重新启动),所有邮件程序操作都可以正常工作。

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

回答

4

最后我打这个问题再一次,当我试图在测试数据库中进行测试,并且我下定决心一劳永逸弄清楚为什么我得到这个错误,为什么没有其他人似乎已经遇到它(谷歌的结果很少)。

在完全拆除我的项目并重建它之后,我终于将问题指向我安装的Sitemap生成器插件。一旦我删除了所有的痕迹,上述错误终于停止了。

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 => "[email protected]", 
    :password => 'password' 
    } 

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

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

end 
0

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

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

FatFreeCRM::Application.configure do 

    ... 

    ActionMailer::Base 
end 
相关问题