Аргумент require_tree должен быть директорией rails 3.1.1 precompile assets

Я постоянно пытался получить ресурсы для предварительной компиляции на моем производственном сервере (простая установка ubuntu с ruby ​​1.9.2 и Rails 3.1.1, а также пробовал 3.1.2RC с новыми звездочками 2.10) .

"аргумент require_tree должен быть каталогом". Я видел другие проблемы, связанные с этим в стеке, но ситуация не совсем такая, и ни одно из предложенных решений не помогло - например, создать файл-заглушку в подпапке, а затем ссылаться только относительно в этой точке. Не повезло.

И в довершение ко всему, это, конечно, отлично работает на всех машинах разработки (Mac, но с идентичными конфигурациями, даже с подходящим gem для gem), в производственной среде env.

Вот мой /app/assets/javascript/application.js:

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

Ничего особенного. В основном это просто указание на настоящий файл манифеста для области приложения (да, не совсем упакованные ванильные Rails, но ...)

Вот мой тупиковый манифест в моем представлении / 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 должен быть каталогом

Здесь должна быть какая-то крошечная разница, которую я просто не вижу. Любая помощь приветствуется!


comment
вам действительно следует переместить их активы туда, где они принадлежат, а не помещать их в каталог app / view   -  person Thomas R. Koll    schedule 17.11.2011
comment
Это немного сложнее, чем показано в этом упрощенном примере. Просмотры жестко привязаны к активам, и их физическое местонахождение имеет больше смысла.   -  person evets    schedule 17.11.2011
comment
Может быть, manifest.coffee.js должен быть manifest.js.coffee?   -  person Paul Biggar    schedule 15.01.2012
comment
Добавьте .gitkeep файлов (или .gitignore файлов в пустые каталоги.   -  person Undistraction    schedule 28.03.2013


Ответы (2)


Я столкнулся с той же проблемой, которую вы описали. Моим производственным сервером был Heroku (стек кедра). В моем случае проблема заключалась в том, что один из моих:

require_tree ./mobile

Указывает на допустимый каталог, но в этом каталоге нет файлов. На dev это не имело значения, но что-то в настройке производства приводило к ошибке: «аргумент require_tree должен быть каталогом».

Надеюсь, это поможет.

person Keith Schacht    schedule 18.12.2011
comment
Так что я просто потерял 2 часа на это, и, надеюсь, это кому-то поможет в будущем. Если в папке ничего нет, героку не может его создать. (вам нужно будет поместить туда хотя бы .gitkeep, если вы все еще хотите) - person Will; 30.07.2012
comment
Это проблема с git, а не с рубином или рельсами. Git не создает каталог, если в нем нет файлов. Проверьте свое репо, держу пари, что там нет пустых каталогов. - person Victor Pudeyev; 24.09.2012
comment
Просто была эта проблема с Backbone Gem for Rails. Спасибо за это решение! Теперь все работает :) - person ac360; 16.06.2013
comment
Да, просто поместив файл в эти пустые каталоги, я решил проблему. Даже просто пустые файлы. - person Rtype; 12.03.2014
comment
Хороший способ - поместить пустой файл в пустой каталог с именем .gitkeep. - person StingeyB; 04.04.2014

require_tree необходимо указать существующую папку, но git не хранит пустые папки, поэтому при развертывании на героку, этих пустых папок не существует.

одна хитрость - добавить пустой файл .keep в папки, которые вы хотите сохранить.

person qup    schedule 10.05.2014
comment
Это настоящая причина, по которой пустой каталог не существует в производственной среде, потому что его нет в git. - person Kris; 02.07.2014