2017年1月31日火曜日

railsのActiveRecordでSystemStackErrorが出た件

何気なくmodel作ってenum書いてたらSystemStackError出たので調べました。
railsのバージョンは4.1.6でした。

こんな感じのmodelを作っていました。
class Sample < ActiveRecord::Base
  enum target: {
    all_user: 0,
    parent: 1,
  }
end

そして動かしてみようとすると、エラーが出ました。
irb(main):001:0* aaa = Sample.new
SystemStackError: stack level too deep
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activerecord-4.1.6/lib/active_record/scoping.rb:68:in `value_for'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activesupport-4.1.6/lib/active_support/per_thread_registry.rb:47:in `public_send'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activesupport-4.1.6/lib/active_support/per_thread_registry.rb:47:in `block in method_missing'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activerecord-4.1.6/lib/active_record/scoping.rb:14:in `current_scope'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activerecord-4.1.6/lib/active_record/scoping/named.rb:25:in `all'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activerecord-4.1.6/lib/active_record/scoping/named.rb:151:in `block in scope'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activerecord-4.1.6/lib/active_record/model_schema.rb:335:in `compute_table_name'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activerecord-4.1.6/lib/active_record/model_schema.rb:148:in `reset_table_name'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activerecord-4.1.6/lib/active_record/model_schema.rb:109:in `table_name'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activerecord-4.1.6/lib/active_record/core.rb:151:in `arel_table'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activerecord-4.1.6/lib/active_record/core.rb:167:in `relation'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activerecord-4.1.6/lib/active_record/scoping/named.rb:33:in `default_scoped'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activerecord-4.1.6/lib/active_record/scoping/named.rb:28:in `all'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activerecord-4.1.6/lib/active_record/scoping/named.rb:151:in `block in scope'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activerecord-4.1.6/lib/active_record/model_schema.rb:335:in `compute_table_name'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activerecord-4.1.6/lib/active_record/model_schema.rb:148:in `reset_table_name'
... 10760 levels...
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:241:in `load'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:241:in `block in load'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:232:in `load_dependency'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:241:in `load'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/spring-1.7.2/lib/spring/commands/rails.rb:6:in `call'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/spring-1.7.2/lib/spring/command_wrapper.rb:38:in `call'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:191:in `block in serve'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:161:in `fork'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:161:in `serve'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:131:in `block in run'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:125:in `loop'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/spring-1.7.2/lib/spring/application.rb:125:in `run'
 from /Users/xxx/Documents/github/test/vendor/bundle/ruby/2.3.0/gems/spring-1.7.2/lib/spring/application/boot.rb:19:in `'
 from /Users/xxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
 from /Users/xxx/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
 from -e:1:in `
'



調べてみると、enumには使ってはいけない単語を使ってるけど、
それをチェックしてないから起こっているエラーのようです。
すでに修正されていて、rails4.2からはSystemStackErrorではなく、
conflictしてるとわかるエラーが出るようです


参考URL
https://github.com/rails/rails/issues/16347
https://github.com/rails/rails/commit/94b7328b08fcc55e82bfcaa34a25ae718921ae1c

2017年1月24日火曜日

jenkinsのpluginのupdateでエラー出た件

Jenkinsのプラグインのアップデートをしようとアップデート画面を開いたら、
エラーが出てJenkinsおじさんが怒っていたので調べました。

対象のバージョンは以下のとおりです
Jenkins 1.595
Subversion Plug-in 1.54

Jenkinsの管理 - プラグインの管理 - アップデートを開くと、
Subversionプラグインで以下のエラーが出ていました。

javax.servlet.ServletException: org.apache.commons.jelly.JellyTagException: jar:file:/var/cache/jenkins/war/WEB-INF/lib/jenkins-core-1.595.jar!/hudson/PluginManager/table.jelly:74:52:  java.lang.StackOverflowError
 at org.kohsuke.stapler.jelly.JellyClassTearOff.serveIndexJelly(JellyClassTearOff.java:117)
 at org.kohsuke.stapler.jelly.JellyFacet.handleIndexRequest(JellyFacet.java:127)
 at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:735)
 at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
 at org.kohsuke.stapler.MetaClass$3.doDispatch(MetaClass.java:183)
 at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
 at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
 at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
 at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
 at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
 at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)
 at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494)
 at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:96)
 at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:88)
 at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
 at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48)
 at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
 at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
 at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
 at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
 at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
 at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
 at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
 at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
 at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
 at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
 at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
 at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
 at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)
 at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
 at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
 at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
 at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
 at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
 at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
 at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
 at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:46)
 at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
 at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
 at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
 at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
 at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474)
 at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
 at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
 at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)
 at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
 at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
 at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
 at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
 at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
 at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
 at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
 at org.eclipse.jetty.server.Server.handle(Server.java:370)
 at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
 at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949)
 at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011)
 at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
 at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
 at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
 at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
 at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
 at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
 at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.commons.jelly.JellyTagException: jar:file:/var/cache/jenkins/war/WEB-INF/lib/jenkins-core-1.595.jar!/hudson/PluginManager/table.jelly:74:52:  java.lang.StackOverflowError
 at org.apache.commons.jelly.impl.TagScript.handleException(TagScript.java:745)
 at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:289)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161)
 at org.apache.commons.jelly.tags.core.WhenTag.doTag(WhenTag.java:46)
 at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161)
 at org.apache.commons.jelly.tags.core.ChooseTag.doTag(ChooseTag.java:38)
 at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
 at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
 at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
 at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
 at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
 at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
 at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
 at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
 at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)
 at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
 at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)
 at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
 at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:95)
 at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:63)
 at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:53)
 at org.kohsuke.stapler.jelly.JellyClassTearOff.serveIndexJelly(JellyClassTearOff.java:112)
 ... 65 more
Caused by: java.lang.StackOverflowError
 at java.io.UnixFileSystem.getBooleanAttributes0(Native Method)
 at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:242)
 at java.io.File.exists(File.java:813)
 at hudson.util.TextFile.exists(TextFile.java:57)
 at hudson.model.UpdateSite.getData(UpdateSite.java:271)
 at hudson.model.UpdateSite.getPlugin(UpdateSite.java:331)
 at hudson.model.UpdateCenter.getPlugin(UpdateCenter.java:332)
 at hudson.model.UpdateSite$Plugin.getNeededDependencies(UpdateSite.java:684)
 at hudson.model.UpdateSite$Plugin.isNeededDependenciesCompatibleWithInstalledVersion(UpdateSite.java:762)
 at hudson.model.UpdateSite$Plugin.isNeededDependenciesCompatibleWithInstalledVersion(UpdateSite.java:763)

調べてみると、Subversionプラグインをupdateするとよいらしく、
Jenkins上からはアップデートできないので手動でアップデートを行いました。
wget http://updates.jenkins-ci.org/download/plugins/subversion/2.7.1/subversion.hpi
sudo cp -p subversion.hpi /var/lib/jenkins/plugins/
sudo service restart jenkins

これでエラーは出なくなりました。
ちなみにJenkinsでエラーは出なくなるけど、インストール済みのプラグインのところからSubversionプラグインが消えてました。
消えたままでも問題なさそうでしたけど、一応入れたほうがよいかなという場合は、
利用可能のところからインストールすることでまたインストール済みのところに現れるようになりました。


参考URL
https://issues.jenkins-ci.org/browse/JENKINS-36361
http://qiita.com/tnishi91/items/50e6a1f1071c135a22ee