Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Circular dependency when running `warble config` on a project that has Warbler::Task.new in its Rakefile

未关闭
#137 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
25/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
停滞
技术栈
ruby
领域
build-system

调研方向

Start with the recursion in the trace: load_project_rakefile in lib/warbler/application.rb calls back into the Rails trait's before_configure in lib/warbler/traits/rails.rb, which re-enters Warbler::Task.new in lib/warbler/task.rb via Config#initialize in lib/warbler/config.rb. Reproduce with the Rakefile and an empty config/environment.rb from the report and run warble config. Done when that command writes the config file without the stack-level-too-deep error.

由索引模型根据 Issue 内容生成。

描述

I realize create a config file after adding the Rake task probably isn't very common, but it just happens to be what I've done the first time I've used Warbler.

Here's how to reproduce the issue (I'm using Warbler 1.3.6):

$ (
cat <<'EOF'
require 'rake'
require 'warbler'
Warbler::Task.new
EOF
) > Rakefile
$ mkdir config; touch config/environment.rb

And the stack trace:

warble aborted!
stack level too deep
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:56:in `load_project_rakefile'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler.rb:25:in `project_application'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits/rails.rb:27:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/config.rb:176:in `initialize'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/task.rb:48:in `initialize'
/Users/user/code/warbler/spec/sample_rake_bug/rakefile:3:in `(root)'
org/jruby/RubyKernel.java:1046:in `load'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:1:in `(root)'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:58:in `load_project_rakefile'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:56:in `load_project_rakefile'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler.rb:25:in `project_application'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits/rails.rb:27:in `before_configure'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/config.rb:176:in `initialize'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/task.rb:48:in `initialize'
org/jruby/RubyKernel.java:1046:in `load'
/Users/user/code/warbler/spec/sample_rake_bug/rakefile:3:in `(root)'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:1:in `(root)'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:58:in `load_project_rakefile'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:56:in `load_project_rakefile'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler.rb:25:in `project_application'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits/rails.rb:27:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/config.rb:176:in `initialize'
org/jruby/RubyKernel.java:1046:in `load'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/task.rb:48:in `initialize'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/code/warbler/spec/sample_rake_bug/rakefile:3:in `(root)'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:1:in `(root)'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:58:in `load_project_rakefile'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:56:in `load_project_rakefile'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler.rb:25:in `project_application'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits/rails.rb:27:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
org/jruby/RubyKernel.java:1046:in `load'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/config.rb:176:in `initialize'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/task.rb:48:in `initialize'
/Users/user/code/warbler/spec/sample_rake_bug/rakefile:3:in `(root)'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:1:in `(root)'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:58:in `load_project_rakefile'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:56:in `load_project_rakefile'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler.rb:25:in `project_application'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits/rails.rb:27:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
org/jruby/RubyKernel.java:1046:in `load'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/config.rb:176:in `initialize'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/task.rb:48:in `initialize'
/Users/user/code/warbler/spec/sample_rake_bug/rakefile:3:in `(root)'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:1:in `(root)'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:58:in `load_project_rakefile'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:56:in `load_project_rakefile'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler.rb:25:in `project_application'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits/rails.rb:27:in `before_configure'
org/jruby/RubyKernel.java:1046:in `load'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/config.rb:176:in `initialize'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/task.rb:48:in `initialize'
/Users/user/code/warbler/spec/sample_rake_bug/rakefile:3:in `(root)'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:1:in `(root)'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:58:in `load_project_rakefile'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:56:in `load_project_rakefile'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler.rb:25:in `project_application'
org/jruby/RubyKernel.java:1046:in `load'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits/rails.rb:27:in `before_configure'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/config.rb:176:in `initialize'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/task.rb:48:in `initialize'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/code/warbler/spec/sample_rake_bug/rakefile:3:in `(root)'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:1:in `(root)'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:58:in `load_project_rakefile'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:56:in `load_project_rakefile'
org/jruby/RubyKernel.java:1046:in `load'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler.rb:25:in `project_application'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits/rails.rb:27:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/config.rb:176:in `initialize'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/task.rb:48:in `initialize'
/Users/user/code/warbler/spec/sample_rake_bug/rakefile:3:in `(root)'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:1:in `(root)'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:58:in `load_project_rakefile'
org/jruby/RubyKernel.java:1046:in `load'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:56:in `load_project_rakefile'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler.rb:25:in `project_application'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits/rails.rb:27:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits.rb:28:in `before_configure'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/config.rb:176:in `initialize'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/task.rb:48:in `initialize'
/Users/user/code/warbler/spec/sample_rake_bug/rakefile:3:in `(root)'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:1:in `(root)'
org/jruby/RubyKernel.java:1046:in `load'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:58:in `load_project_rakefile'
org/jruby/RubyArray.java:1613:in `each'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/application.rb:56:in `load_project_rakefile'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler.rb:25:in `project_application'
/Users/user/.rbenv/versions/jruby-1.7.2/lib/ruby/gems/shared/gems/warbler-1.3.6/lib/warbler/traits/rails.rb:27:in `before_configure'

--- Want to back this issue? **[Post a bounty on it!](https://www.bountysource.com/issues/1446630-circular-dependency-when-running-warble-config-on-a-project-that-has-warbler-task-new-in-its-rakefile?utm_campaign=plugin&utm_content=tracker%2F136961&utm_medium=issues&utm_source=github)** We accept bounties via [Bountysource](https://www.bountysource.com/?utm_campaign=plugin&utm_content=tracker%2F136961&utm_medium=issues&utm_source=github).
主要语言
Ruby
星标
901
派生
206
平均合并
1 天 10 小时
30 天内合并 PR
3

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

jruby/warbler 的其他 Issue

查看 jruby/warbler 的全部 Issue

相似的 Issue

更多 Ruby Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。