0

私は何週間もこのエラーに悩まされてきました。

ブートストラップ gem を application.css ファイルに含めようとすると、「スタック レベルが深すぎます」というエラーが発生する場合があります。

私がグーグルで指摘したことから、これの根本的な問題は、スプロケットとブートストラップサスの両方で二重に定義されたメソッド「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 を最新バージョンにアップデートしたところ、エラーはしばらく消えました... 次に「bundle install」を実行すると、エラーが再び表示されました。別のブートストラップ 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 に答える