28

He estado dando vueltas y vueltas aquí tratando de hacer que los activos se compilen previamente en mi servidor de producción (instalación simple de ubuntu con ruby ​​1.9.2 y Rails) 3.1.1, y probado 3.1.2RC con los nuevos piñones 2.10 también)."require_tree argumento debe ser un directorio" carriles 3.1.1 recursos de precompilación

"El argumento require_tree debe ser un directorio". He visto otros problemas relacionados con esto en la pila, pero la situación no es exactamente la misma y ninguna de las soluciones propuestas me ha ayudado, como crear un archivo de resguardo en la subcarpeta y, a continuación, hacer referencia relativamente solo en ese momento. Sin suerte.

Y para colmo, por supuesto, esto funciona perfectamente en todas las máquinas de desarrollo (mac, pero con configuraciones idénticas, incluso haciendo juego con la gema), en el entorno de producción.

Aquí está mi /app/assets/javascript/application.js:

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

No hay mucho a ella. Básicamente, solo apunta al archivo de manifiesto real para el área de la aplicación (sí, no exactamente en recuadros vainilla Rails pero ...)

Aquí está mi stub manifiesto en mis vistas/admin (/views/app/manifest.coffee.js):

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

Como he dicho, en dev env, no hay ningún problema. El inventario de activos se compila sobre la marcha y todo es genial. Ejecución de activos de rake: precompilación en la máquina de desarrollo, sin problemas.

lo envío a la máquina de producción y ejecutar el mismo código exacto y me sale:

argumento require_tree debe ser un directorio

Tiene que haber alguna pequeña diferencia minúscula aquí donde Simplemente no estoy viendo. ¡Cualquier ayuda sería muy apreciada!

+0

realmente debería mover los activos a los que pertenecen y no ponerlos en el directorio de la aplicación/vista –

+0

Es un poco más complicado que en este ejemplo simplificado. Los puntos de vista están estrechamente vinculados a los activos y tienen más sentido para ubicarse físicamente. – evets

+0

¿Podría ser que manifest.coffee.js se manifieste.js.coffee? –

Respuesta

85

Me encontré con este mismo problema exacto que usted describió. Mi servidor de producción era Heroku (pila de cedro). En mi caso el problema fue que uno de mi:

require_tree ./mobile 

estaba apuntando a un directorio legítima, pero este directorio no tenían archivos. En dev no importaba, pero algo sobre la configuración de producción estaba dando como resultado el error, "require_tree argument debe ser un directorio".

Espero que eso ayude.

+2

Gracias, me salvó el día ... – bragboy

+1

Así que perdí 2 horas y espero que ayude a alguien en el futuro. Si nada lo hace en la carpeta heroku no puede crearlo. (tendrá que poner al menos un .gitkeep allí si todavía lo quiere) – Will

+11

Este es un problema con git en lugar de ruby ​​o rails. Git no crea un directorio si hay no hay archivos en él. Revisa tu repositorio, apuesto a que no hay directorios vacíos allí. –

17

require_tree debe ser objeto de una carpeta existente, pero git no se almacenar carpetas vacías, por lo tanto, cuando se implementa en heroku, no existe esas carpetas vacías.

Un truco es agregar un archivo .keep vacío a las carpetas que desea conservar.

+0

Este es el verdadero motivo por el que el directorio vacío no existe en producción porque no está en git. – Kris

Cuestiones relacionadas