0

我已经被这个错误困住了好几个星期了。

当我尝试在我的 application.css 文件中包含引导 gem 时,它可能会给出“堆栈级别太深”的错误

从我用谷歌搜索的内容来看,这个问题的根源在于 sprockets 和 bootstrap-sass 中的双重定义方法“image_url”。

这是我的错误日志:

ActionView::Template::Error (stack level too deep
  (in /Users/jason/.rvm/gems/ruby-2.0.0-p247@drwho/bundler/gems/bootstrap-rails-7ae5424fa38b/app/assets/stylesheets/twitter/bootstrap.scss)):
  sprockets (2.2.2) lib/sprockets/context.rb:196

现在,我已将 bootstrap-sass 更新到最新版本,并且错误消失了一段时间......下次我执行“捆绑安装”时,错误再次弹出。我还尝试了不同的引导 gem:“anjlab-bootstrap”,结果是一样的。

最奇怪的是:

我试图通过创建一个新的空 rails 应用程序并使用相同的 Gemfile 来重现此错误,事实上,我几乎将每个文件都复制到了新项目中,包括“app”、“config”、“lib”、“public” "、"Gemfile" 和 "Gemfile.lock"

并且在新项目中没有错误。我很高兴地将新项目推送到 Github。第二天,当我在办公室电脑上时,我 git clone 新项目,进行捆绑安装。你猜怎么着......同样的错误再次出现。

在这里我的回购(新的应该可以工作)供参考

git@github.com:jasonlu/drwho.git

我在想问题可能出在我的 rvm 上。我还尝试重新安装整个 rvm,但没有运气。

有人可以帮忙吗?

4

1 回答 1

1

好吧,这是一个疯狂的想法。可能,您的项目中的文件加载顺序不确定。这是一个例子:

# file2.rb
def f; puts "In #{__FILE__}"; end

# file1.rb
def f; puts "In #{__FILE__}"; end

# test.rb
Dir.glob('file*.rb').each { |x| require x }
f

可能的输出:

machine1> ruby test.rb
In file1.rb

# copy *.rb to a different machine
machine2> ruby test.rb
In file2.rb

另请参阅此(不直接相关)答案:Dir.glob 是否保证订单?

于 2013-07-10T12:51:51.837 回答