我刚刚在交 key 版本控制 14.1 上安装了 gerrit 2.12.4,当我尝试注册新电子邮件功能时,我收到了 500 内部错误。 我在 error_log 中收到以下错误消息,但不知道如何解释它。
这是配置:
[gerrit]
basePath = /srv/repos/git/gerrit2/
canonicalWebUrl = http://revision-control:7900/
[database]
type = mysql
hostname = localhost
database = reviewdb
username = gerrit2
[index]
type = LUCENE
[auth]
type = OPENID
[receive]
enableSignedPush = false
[sendemail]
enable = true
smtpServer = smtp.office365.com
smtpServerPort = 587
smtpUser = <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="40252d21292c00252d21292c6e232f2d" rel="noreferrer noopener nofollow">[email protected]</a>
smtpEncryption = ssl
sslVerify = false
[container]
user = gerrit2
javaHome = /usr/lib/jvm/java-7-openjdk-amd64/jre
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = http://*:7900/
[cache]
directory = cache
我怀疑该过程在 smtp 身份验证之前就失败了。 我检查了java路径,它似乎是正确的。
我还授予了 gerrit2 对 java 文件夹和 gerrit 文件夹的完全权限。
任何帮助将不胜感激。
[2016-09-07 20:55:23,439] [main] INFO org.eclipse.jetty.server.ServerConnector : Started ServerConnector@4a9829f1{HTTP/1.1}{0.0.0.0:7900}
[2016-09-07 20:55:23,440] [main] INFO org.eclipse.jetty.server.Server : Started @20499ms
[2016-09-07 20:55:23,442] [main] INFO com.google.gerrit.pgm.Daemon : Gerrit Code Review 2.12.4 ready
[2016-09-07 20:56:54,864] [HTTP-50] WARN org.eclipse.jetty.servlet.ServletHandler : Error for /accounts/self/emails/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d9adbcaaad99bcb4b8b0b5f7bab6b4" rel="noreferrer noopener nofollow">[email protected]</a>
java.lang.ExceptionInInitializerError
at com.google.gerrit.server.mail.OutgoingEmail.add(OutgoingEmail.java:384)
at com.google.gerrit.server.mail.RegisterNewEmailSender.init(RegisterNewEmailSender.java:49)
at com.google.gerrit.server.mail.OutgoingEmail.send(OutgoingEmail.java:92)
at com.google.gerrit.server.account.CreateEmail.apply(CreateEmail.java:134)
at com.google.gerrit.server.account.CreateEmail.apply(CreateEmail.java:101)
at com.google.gerrit.server.account.CreateEmail.apply(CreateEmail.java:42)
at com.google.gerrit.httpd.restapi.RestApiServlet.service(RestApiServlet.java:328)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:287)
at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:277)
at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:182)
at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)
at com.google.gerrit.httpd.GetUserFilter.doFilter(GetUserFilter.java:82)
at com.google.gwtexpui.server.CacheControlFilter.doFilter(CacheControlFilter.java:73)
at com.google.gerrit.httpd.RunAsFilter.doFilter(RunAsFilter.java:117)
at com.google.gerrit.httpd.AllRequestFilter$FilterProxy$1.doFilter(AllRequestFilter.java:136)
at com.google.gerrit.httpd.AllRequestFilter$FilterProxy.doFilter(AllRequestFilter.java:105)
at com.google.gerrit.httpd.RequestContextFilter.doFilter(RequestContextFilter.java:75)
at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:119)
at com.google.inject.servlet.GuiceFilter$1.call(GuiceFilter.java:133)
at com.google.inject.servlet.GuiceFilter$1.call(GuiceFilter.java:130)
at com.google.inject.servlet.GuiceFilter$Context.call(GuiceFilter.java:203)
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:130)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:499)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Can only invoke this method before calling getInstance
at org.apache.commons.validator.routines.DomainValidator.updateTLDOverride(DomainValidator.java:1680)
at com.google.gerrit.server.mail.OutgoingEmailValidator.<clinit>(OutgoingEmailValidator.java:24)
... 41 more
[2016-09-07 20:56:54,866] [HTTP-50] ERROR com.google.gerrit.pgm.http.jetty.HiddenErrorHandler : Error in PUT /accounts/self/emails/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c4b0a1b7b084a1a9a5ada8eaa7aba9" rel="noreferrer noopener nofollow">[email protected]</a>
java.lang.ExceptionInInitializerError
at com.google.gerrit.server.mail.OutgoingEmail.add(OutgoingEmail.java:384)
at com.google.gerrit.server.mail.RegisterNewEmailSender.init(RegisterNewEmailSender.java:49)
at com.google.gerrit.server.mail.OutgoingEmail.send(OutgoingEmail.java:92)
at com.google.gerrit.server.account.CreateEmail.apply(CreateEmail.java:134)
at com.google.gerrit.server.account.CreateEmail.apply(CreateEmail.java:101)
at com.google.gerrit.server.account.CreateEmail.apply(CreateEmail.java:42)
at com.google.gerrit.httpd.restapi.RestApiServlet.service(RestApiServlet.java:328)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:287)
at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:277)
at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:182)
at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)
at com.google.gerrit.httpd.GetUserFilter.doFilter(GetUserFilter.java:82)
at com.google.gwtexpui.server.CacheControlFilter.doFilter(CacheControlFilter.java:73)
at com.google.gerrit.httpd.RunAsFilter.doFilter(RunAsFilter.java:117)
at com.google.gerrit.httpd.AllRequestFilter$FilterProxy$1.doFilter(AllRequestFilter.java:136)
at com.google.gerrit.httpd.AllRequestFilter$FilterProxy.doFilter(AllRequestFilter.java:105)
at com.google.gerrit.httpd.RequestContextFilter.doFilter(RequestContextFilter.java:75)
at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:119)
at com.google.inject.servlet.GuiceFilter$1.call(GuiceFilter.java:133)
at com.google.inject.servlet.GuiceFilter$1.call(GuiceFilter.java:130)
at com.google.inject.servlet.GuiceFilter$Context.call(GuiceFilter.java:203)
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:130)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:499)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Can only invoke this method before calling getInstance
at org.apache.commons.validator.routines.DomainValidator.updateTLDOverride(DomainValidator.java:1680)
at com.google.gerrit.server.mail.OutgoingEmailValidator.<clinit>(OutgoingEmailValidator.java:24)
... 41 more
最佳答案
这似乎是 2.12.4 gerrit 构建中的一个错误。我从 gerrit forum 得到了一些帮助.
问题和修复:
Fix usage of OutgoingEmailValidator to make sure TLD override works
The call to DomainValidator.updateTLDOverride may only be done before
the call to EmailValidator.getInstance otherwise it throws an exception.
Putting the DomainValidator.updateTLDOverride call inside a static
block doesn't seem to be safe enough. Protect it with an atomic boolean
instead.
The bug已修复,正在等待 future 版本中的合并。
关于java - Gerrit 注册新电子邮件 500 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39385094/