web-dev-qa-db-ja.com

"require_tree引数はディレクトリである必要があります" Rails 3.1.1プリコンパイルアセット

私はここで、本番サーバーでアセットをプリコンパイルするために何度も繰り返してきました(Ruby 1.9.2 and Rails = 3.1.1、そして新しいスプロケット2.10でも3.1.2RCを試しました)。

「require_tree引数はディレクトリでなければなりません」。スタックでこれに関連する他の問題を見てきましたが、状況はまったく同じではなく、提案された解決策はどれも役に立ちませんでした。たとえば、サブフォルダーにスタブファイルを作成し、その時点で比較的参照するだけです。運が悪い。

しかも、これはもちろん、本番環境のすべての開発マシン(macのものですが、設定が同じで、gemがgemに一致している場合でも)で完全に機能します。

これが私の/app/assets/javascript/application.jsです:

//= require ../../views/app/manifest
//= require_self

あまりありません。基本的に、アプリ領域の実際のマニフェストファイルをポイントするだけです(そう、厳密にはボックス化されたVanilla Railsですが...)

これが私のviews/admin(/views/app/manifest.coffee.js)の私のスタブマニフェストです:

# = require ./app
# = require_tree ./models
# = require_directory ./views <- or using require_directory, either would work fine.

私が言ったように、dev envでは、まったく問題はありません。アセットパイプラインはオンザフライでコンパイルされ、すべてが優れています。実行中、アセットをレーキ:開発マシンでプリコンパイルします。問題もありません。

それを本番マシンに送信してまったく同じコードを実行すると、次のようになります。

require_tree引数はディレクトリでなければなりません

ここには、私が見ていない小さな違いがいくつかあるはずです。どんな助けでも大歓迎です!

29
evets

私はあなたが説明したのとまったく同じ問題に遭遇しました。私の運用サーバーはHeroku(シダースタック)でした。私の場合、問題は私の次の1つでした。

require_tree ./mobile

正当なディレクトリを指していましたが、このディレクトリにはファイルがありませんでした。開発ではそれは問題ではありませんでしたが、プロダクションセットアップに関する何かがエラーを引き起こしていました、「require_tree引数はディレクトリでなければなりません」。

うまくいけば、それが役立つでしょう。

85
Keith Schacht

require_tree必須既存のフォルダーを指定しますが、gitしない空のフォルダーを保存するため、herokuにデプロイすると、それらの空のフォルダーは存在しません。

1つのトリックは、保持するフォルダーに空の。keepファイルを追加することです。

17
qup