【问题标题】:How can I debug e-mail sending on Gitlab?如何在 Gitlab 上调试电子邮件发送?
【发布时间】:2013-04-14 02:04:45
【问题描述】:

我的 Gitlab(第 5 版)没有发送任何电子邮件,我在试图弄清楚发生了什么事情时迷失了方向。日志没有提供有用的信息。我将其配置为使用sendmail

我写了一个通过 ActionMailer 发送电子邮件的小脚本(我猜它是 gitlab 用来发送电子邮件的,对吧?)。它会正确发送电子邮件。

但是,在我的 Gitlab 上,我可以保证 sendmail 甚至不会被调用。

我是否需要启用某些功能才能获得电子邮件通知?如何调试我的问题?

更新

问题是我在任何地方都找不到任何信息。事情只是默默地失败了。我在哪里可以找到某种日志? log 目录中的日志没有提供有用的信息。

我的问题是,我怎样才能让 Gitlab 更冗长?我怎样才能让它告诉我发生了什么事?

更新 2

我刚刚在Background jobs 部分发现了很多邮件。很多未处理的Sidekiq::Extensions::DelayedMailer。这是什么意思?为什么这些作业没有得到处理?

【问题讨论】:

  • sidekiq 日志中的任何内容(如github.com/gitlabhq/gitlabhq/issues/2747)?请注意,sidekiq 在 5.1 中被 puma 取代,因此检查最新的 GitLab 问题是否仍然存在会很有趣。
  • Sidekiq 日志为空。我会用master最新的gitlab测试一下。
  • 还是同样的问题。问题是我在任何地方都找不到任何信息。事情只是默默地失败了。我在哪里可以找到某种日志? log 目录中的日志没有提供有用的信息。
  • 我刚刚发现很多邮件都安排在后台作业部分。
  • 我也有同样的问题。好像是数据库造成的?

标签: ruby-on-rails ruby gitlab


【解决方案1】:

今天偶然发现这个问题,这是我的研究:

尚不支持在 GitLab GUI 中调试 SMTP 连接。但是有一个待处理的feature request 和一个command line solution

设置所需的 SMTP 设置 /etc/gitlab/gitlab.rb 并运行 gitlab-ctl reconfigure(请参阅 https://docs.gitlab.com/omnibus/settings/smtp.html)。

启动运行gitlab-rails console -e production的控制台。

运行命令ActionMailer::Base.delivery_method显示配置的交付方式(应该是:smtp)。显示所有运行 ActionMailer::Base.smtp_settings 的已配置 SMTP 设置。

发送测试邮件运行

Notify.test_email('youremail@example.com', 'Hello World', 'This is a test message').deliver_now

在 GitLab 的管理页面上,»后台作业«部分显示有关所有作业的信息。那里也列出了失败的 SMTP 连接。

请注意,您可能需要重新启动 GitLab 实例才能使用新配置的 SMTP 设置(在我的实例上,控制台能够发送邮件,GUI 需要重新启动)。运行 gitlab-ctl restart 重启您的实例。

【讨论】:

  • 是否可以直接使用控制台修改ActionMailer::Base.smtp_settings?
  • Afaik No. Docs don't mention 类似这样的东西,我看不到这样做的命令。
  • 非常有用的帖子,可惜我还没找到问题
  • 我在其他地方没有找到上面的命令组合。能够列出 Gitlab 认为它的 STMP 配置是什么,并使用 Notify.test_email().deliver_now 实际查看来自 SMTP 服务器的响应,这使我能够解决我从帮助文档中未列出的 SMTP 配置发送邮件的问题。很有帮助!
【解决方案2】:

首先,我将说明我的问题:sidekiq 负责处理发送电子邮件。由于某种原因,我的 sidekiq 卡住了,重新启动它解决了问题。

我在哪里找到有关我在 Gitlab 上发现的问题的信息:

  1. 日志目录。它有一些信息。
  2. 在管理页面上,“后台作业”部分提供有关 sidekiq 的信息。
  3. javascript 控制台(如果您的浏览器支持的话)也有有用的信息。仅当您的问题与 javascript 相关时。
  4. 如果你达到了这一点,你可以修改 Gitlab 的代码,以便“跟踪”写入文件:

    File.open('/tmp/logfile','a') { |file| file.write("Hello World!\n") }

【讨论】:

    【解决方案3】:

    也许尝试在生产模式下启用交付错误,看看会发生什么

      config.action_mailer.raise_delivery_errors = true
    

    【讨论】:

    • 已经是真的了。我的意思是,它位于config/environments/production.rb,对吧?
    • 我刚刚发现很多邮件都安排在后台作业部分。你知道是什么意思吗?
    • 我不知道 gitlab 是如何工作的,但我想有类似 resque 或延迟作业运行后台队列.. 也许这些队列现在不再工作了。
    【解决方案4】:

    我遇到了同样的问题,发现我需要修改application.rb:

    diff --git a/config/application.rb b/config/application.rb
    index d85bcab..274976f 100644
    --- a/config/application.rb
    +++ b/config/application.rb
    @@ -11,6 +11,8 @@ end
    
     module Gitlab
       class Application < Rails::Application
    +    config.action_mailer.sendmail_settings = { :arguments => "-i" }
    +
         # Settings in config/environments/* take precedence over those specified here.
         # Application configuration should go into files in config/initializers
         # -- all .rb files in that directory are automatically loaded.
    

    注意:我正在运行 Debian 7,它使用 exim 来发送邮件。

    【讨论】:

      【解决方案5】:

      如果您在“计划”选项卡中有很多项目,请在后台作业下的管理部分尝试重新启动 sidekiq

      cd /home/git/gitlab    
      exec rake sidekiq:start RAILS_ENV=production
      

      【讨论】:

        猜你喜欢
        • 2017-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-25
        • 1970-01-01
        • 2018-05-09
        • 1970-01-01
        相关资源
        最近更新 更多