29

我一直在尝试让资产在我的生产服务器上进行预编译(使用 ruby​​ 1.9.2 和 Rails 3.1.1 直接安装 ubuntu,并尝试使用新的 sprockets 2.10 安装 3.1.2RC) .

“require_tree 参数必须是目录”。我已经在堆栈上看到了与此相关的其他问题,但情况并不完全相同,并且所提出的解决方案都没有帮助 - 比如在子文件夹中创建一个存根文件,然后在那时仅相对引用。没运气。

最重要的是,这当然适用于生产环境中的所有开发机器(mac,但具有相同的配置,甚至匹配 gem 的 gem)。

这是我的 /app/assets/javascript/application.js:

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

没什么。基本上只是指向应用程序区域的真实清单文件(是的,不完全是盒装的香草 Rails 而是......)

这是我的视图/管理员(/views/app/manifest.coffee.js)中的存根清单:

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

就像我说的,在开发环境中,完全没有问题。资产管道即时编译,一切都很好。运行,rake assets:在开发机器上预编译,也没有问题。

我将它发送到生产机器并运行完全相同的代码,我得到:

require_tree 参数必须是目录

这里必须有一些我没有看到的微小差异。任何帮助将非常感激!

4

2 回答 2

85

我遇到了您描述的完全相同的问题。我的生产服务器是 Heroku(雪松堆栈)。就我而言,问题是我的一个:

require_tree ./mobile

指向一个合法目录,但该目录没有文件。在开发上,这并不重要,但有关生产设置的某些内容会导致错误,“require_tree 参数必须是目录”。

希望这会有所帮助。

于 2011-12-18T08:38:52.450 回答
18

必须为require_tree提供一个现有文件夹,但git 存储空文件夹,因此当您在 heroku 上部署时,这些空文件夹不存在。

一个技巧是将一个空的.keep文件添加到您要保留的文件夹中。

于 2014-05-10T20:46:41.430 回答