2012-04-28 13 views
9

Soy muy nuevo en node y heroku y sospecho que esto es algún tipo de permiso simple problema, etc., pero parece que no puedo rastrearlo.Heroku (Cedar) + Node + Express + Jade Los archivos javascript del lado cliente en el subdirectorio funcionan localmente con foreman + curl pero no cuando se los envía a Heroku

Tengo varios archivos javascript puros en un subdirectorio de un nivel debajo de mi directorio raíz donde está mi archivo web.js. Tengo una línea en mis web.js archivo para especificar el directorio

app.use('/heatcanvas',express.static(__dirname+'/heatcanvas')); 

Si funciono mi aplicación a nivel local con Heroku capataz me da la respuesta esperada js cuando ejecute el siguiente comando curl

curl localhost:5000/heatcanvas/heatcanvas.js 

Sin embargo cuando empujo a Heroku y golpear la url vivo cor- respondiente en el navegador

www.example.com/heatcanvas/heatcanvas.js 

recibo el siguiente:

Cannot GET /heatcanvas/heatcanvas.js 

Si reviso Firebug y/o los registros de Heroku veo que en realidad estoy obteniendo errores 404 para esos archivos aunque la ruta debe coincidir con lo que se está haciendo localmente. También vale la pena mencionar que el javascript de terceros viene muy bien, solo cuando el atributo src de la etiqueta del script apunta a mi sitio que hay un problema. ¿Qué debo hacer para que mis scripts estén disponibles?

+2

Nunca he investigado los detalles, pero sé que en Rails on Heroku, usted coloca/compila sus activos estáticos en la raíz/pública. Por ejemplo, Rails compila '/ assets/base.sass' con'/public/stylesheets/base.css'. Así que creo que Heroku expone el directorio 'public' como un directorio accesible estático. Por lo general, no puede acceder a archivos arbitrarios en servidores de producción, como es posible que esté acostumbrado en las aplicaciones PHP convencionales. Tendría que especificar una ruta GET que realmente sirva ese archivo heatcanvas.js, pero no le gustaría hacer eso. Estoy realmente oxidado, pero quizás trato de utilizar el directorio 'public'. – danneu

+1

En la [Pila de cedro] (https://devcenter.heroku.com/articles/cedar) las solicitudes se envían al banco de pruebas sin perturbaciones. Por lo tanto, depende de la aplicación/marco servir activos estáticos. El único especial sobre el directorio 'public' es que la aplicación/framework Rails sirve activos desde allí. Las aplicaciones de Node.js tendrán una estructura diferente. –

+0

¿Puede incluir la salida de 'heroku logs -t' durante una de estas solicitudes? –

Respuesta

6

recomiendo que uses process.cwd() valor para obtener el directorio específico

process.env.PWD = process.cwd() 

en el comienzo de sus web.js

le permiten acceder a los archivos fácilmente.

Usted puede hacer

app.use('/heatcanvas',express.static(process.env.PWD+'/heatcanvas')); 

en lugar de utilizar

__dirname 

Advertencia: Asegúrese de ejecutar web.js en el directorio raíz de web.js (web.js Heroku se ejecutan de esa manera)

+1

¡Gracias, esto me ayudó mucho!No estoy seguro si el OP tiene la misma configuración, pero estoy ejecutando Heroku con varios dynos, y resulta que no puede usar 'app.use (... __dirname + '/ path');', como lo hice a nivel local . Tienes que usar 'process.env.PWD' en su lugar. – Gromix

+0

¡Según parece, esto no funciona para mí! Heroku siempre anexa una carpeta llamada "aplicación", por lo que cree que mi server.js (en la raíz) está en una carpeta llamada "aplicación". Probando localmente está bien. – Pille

+0

iam en el mismo estado Pille cómo corrigió los eventos de la carpeta predeterminada de esta aplicación en este ámbito (lo local siempre está bien para mí también) – dewelloper

Cuestiones relacionadas