保存设计用户时Rails EOFError(到达文件末尾)

Posted

技术标签:

【中文标题】保存设计用户时Rails EOFError(到达文件末尾)【英文标题】:Rails EOFError (end of file reached) when saving a devise user 【发布时间】:2013-05-25 01:29:53 【问题描述】:

我在尝试创建用户时遇到此错误(我正在使用设计 gem)。

EOFError (end of file reached):

我之前遇到过这个问题,这是由于我使用 zoho mail 的 smtp 设置造成的。

我相信我下面的配置解决了这个问题:

ActionMailer::Base.delivery_method = :smtp  
ActionMailer::Base.smtp_settings =             
  :address              => "smtp.zoho.com", 
  :port                 => 465,              
  :domain               => 'example.com',   
  :user_name            => 'user@example.com',
  :password             => 'password',         
  :authentication       => :login,
  :ssl                  => true,
  :tls                  => true,
  :enable_starttls_auto => true    

现在我们已将 SSL 添加到该站点,我相信这就是导致此错误发生的原因。

是否有人对此错误或使用 SSL 的 zoho mail smtp 设置有任何见解?

【问题讨论】:

【参考方案1】:

此错误是由于我的 config/initializers/devise.rb 没有为 config.mailer_sender 指定正确的电子邮件地址。

【讨论】:

你刚刚让我离开 2 小时,寻找某种解决方案来解释为什么会引发这个异常。非常感谢!这是我见过的最奇怪的事情之一,因为我的 conf 使用的是 gmail 的 smtp 服务器,而不是那些与我的域相关的服务器。 使用正确的电子邮件地址设置仍然会出现相同的错误【参考方案2】:

还有!我犯了这个额外的错误并遇到了同样的问题:我使用自己的域而不是邮件服务器域作为“域”变量。

你的环境变量应该是:

GMAIL_DOMAIN=gmail.com

或者上面的例子:

:domain => 'gmail.com',

【讨论】:

【参考方案3】:

我在这里找到了错误的一个原因 => https://***.com/a/40354121/6264112

但这并没有解决我的问题。虽然我没有收到任何错误,但我的电子邮件仍然无法通过 Zoho 工作,所以我找到了另一种非常适合我需要的解决方案...

1) 使用 SMTP 将 Zoho 连接到 gmail。我将我的 zoho 电子邮件设置为我的个人 gmail 帐户的别名,以便将 zoho 电子邮件转发到 gmail,我可以从我的 zoho 电子邮件地址在 gmail 中回复它们。无论如何都应该这样做,这样您就不必登录 zoho。只需从 gmail 发送所有电子邮件。

2) 将 ActionMailer 连接到 gmail 帐户而不是 zoho。

config.action_mailer.smtp_settings = 
    :address                          => 'smtp.gmail.com',
    :port                                 => 587,
    :user_name                     => ENV["gmail_username"],
    :password                       => ENV["gmail_password"],
    :authentication                => :plain,
    :enable_starttls_auto     => true

现在,我只需要在邮件程序中指定 to 和 from 值,如下所示:

def notify_admin (message_details)
    @message_details = message_details
    mail(to: "jesse@mydomain.com", subject: "Contact form filled out by: " + message_details[:name], from: message_details[:email])
end

当我想向自己发送电子邮件时,这很有效,就像上面有人提交联系表单时的示例一样。

当我想从我的域发送电子邮件时,它也可以工作,例如当他们填写铅磁铁时。我所做的只是切换到:和从:地址。

【讨论】:

这是最后的手段。我删除了 ENV 变量,它会工作 绝对是最后的努力...但是为什么 ENV 变量会导致问题呢?如果您不想将密码存储在公共存储库中怎么办? 如果您将外部 gmail 主机设置为 smtp-relay.gmail.com,也会发生此错误 - 将其设置为 smtp.gmail.com 似乎可以正常工作(2017 年)。【参考方案4】:

这是一个有效的pony gem 调用。

Pony.mail(
      :to => 'apotonick@gmail.com',
      subject: "Pony ride",
      body: "Awesome!",
      from: "nick@trb.to", # this MUST be the sending Zoho email.

      :via => :smtp,
      :via_options => 
        :address        => 'smtp.zoho.com',
        :port           => '465',
        :enable_starttls_auto => true,
        ssl: true,
        :user_name      => 'nick@trb.to', # MUST be identical to :from.
        :password       => 'yourStrongPw',
        :authentication => :login,
      
    )

【讨论】:

【参考方案5】:

我遇到了这个问题,我尝试了所有方法,但仍然无法弄清楚问题所在。

让我们面对现实吧,这是一条 SH!t 消息。虽然我在本地使用 POW 运行我的 rails 应用程序,但我确实发现了它实际上是一个 POW 错误。

当我运行 rails server 并执行导致错误的相同操作时,我实际上得到了真正的错误消息并且能够发现我没有正确设置我的控制器

【讨论】:

以上是关于保存设计用户时Rails EOFError(到达文件末尾)的主要内容,如果未能解决你的问题,请参考以下文章

EOFError 错误尝试通过带有 Rails 3.1.3 的 SMTP 使用 Amazon SES

EOFError: 文件末尾到达 Net::HTTP 问题

Rails - 如何覆盖设计SessionsController以在用户登录时执行特定任务?

无法在 Rails 上的两个不同表上注册我的个人资料数据和用户数据 - 设计

WordPress 用户迁移到 Rails 设计

单击时禁用引导表行并将其保存在 Ruby on Rails 中