'bootstrap'相关宝石上的'堆栈级太深'问题非常奇怪

时间:2013-07-10 11:40:57

标签: ruby-on-rails ruby twitter-bootstrap rack

我已经坚持这个错误好几周了。

当我尝试在我的application.css文件中包含bootstrap gems时,它可能会出现“Stack level too deep”的错误

从我用googled指出,这是因为在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更新到最新版本,错误已经消失了一段时间...... 下次我进行“捆绑安装”时,错误再次出现。 我也尝试了不同的bootstrap gem:“anjlab-bootstrap”结果是一样的。

最奇怪的是:

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

新项目没有错误。 我很乐意将新项目推向Github。 第二天,当我在办公室电脑上时,我git克隆新项目,进行捆绑安装。 猜猜是什么....同样的错误加速了。

这里我的回购(新的,应该有效)作为参考

git@github.com:jasonlu / drwho.git

我认为这个问题可能出在我的rvm上。我也尝试重新安装整个rvm并且没有运气。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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

另请参阅此(不直接相关)答案:Does Dir.glob guarantee the order?