我在这里一直在尝试让资产在我的生产服务器上预编译(使用 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 asset:在开发机器上预编译,也没有问题。
我将其发送到生产机器并运行完全相同的代码,我得到:
require_tree 参数必须是目录
这里一定有一些我没有看到的微小差异。 任何帮助将不胜感激!
我遇到了你所描述的完全相同的问题。我的生产服务器是 Heroku(雪松堆栈)。就我而言,问题是我的一个:
require_tree ./mobile
指向一个合法目录,但该目录没有文件。在开发上,这并不重要,但有关生产设置的某些内容导致了错误,“require_tree 参数必须是一个目录”。
希望有帮助。
require_tree must 被给予一个现有文件夹,但是 git 不 存储空文件夹, 因此,当您在heroku上部署时,那些空文件夹不存在。
一个技巧是将空的 .keep 文件添加到您要保留的文件夹中。
对我来说,手动创建一个(空)文件夹是可行的
shared/vendor/javascript
。
花了一些时间调试相关问题。事实证明,JavaScript 错误导致整个目录无法加载。因此,我建议首先重点解决所有控制台错误。
对于其他 require_tree 问题,我建议还查看链轮文档,即。 https://github.com/rails/sprockets#sprockets-directives