“require_tree 参数必须是目录”rails 3.1.1 预编译资产

问题描述 投票:0回答:4

我在这里一直在尝试让资产在我的生产服务器上预编译(使用 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 参数必须是目录

这里一定有一些我没有看到的微小差异。 任何帮助将不胜感激!

ruby-on-rails ruby-on-rails-3 production-environment asset-pipeline sprockets
4个回答
85
投票

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

require_tree ./mobile

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

希望有帮助。


18
投票

require_tree must 被给予一个现有文件夹,但是 git 存储空文件夹, 因此,当您在heroku上部署时,那些空文件夹不存在。

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


1
投票

对我来说,手动创建一个(空)文件夹是可行的

shared/vendor/javascript


0
投票

花了一些时间调试相关问题。事实证明,JavaScript 错误导致整个目录无法加载。因此,我建议首先重点解决所有控制台错误。

对于其他 require_tree 问题,我建议还查看链轮文档,即。 https://github.com/rails/sprockets#sprockets-directives

© www.soinside.com 2019 - 2024. All rights reserved.