2012-04-28 4 views
9

Sono molto nuovo al nodo e heroku e sospetto che si tratti di una specie di semplice permesso problema ecc, ma non riesco a rintracciarlo.Heroku (Cedar) + Node + Express + Jade I file javascript lato client nella sottodirectory funzionano localmente con foreman + curl ma non quando vengono inviati a Heroku

Ho diversi file javascript puri in una sottodirectory di un livello al di sotto della directory principale in cui si trova il mio file web.js. Ho una linea nei miei web.js file per specificare la directory

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

Se corro la mia applicazione a livello locale con Heroku Foreman ho la risposta attesa js quando ho eseguito il seguente comando ricciolo

curl localhost:5000/heatcanvas/heatcanvas.js 

Tuttavia quando spingo a Heroku e colpire il corresponsing URL dal vivo nel browser

www.example.com/heatcanvas/heatcanvas.js 

ricevo il seguente:

Cannot GET /heatcanvas/heatcanvas.js 

Se controllo Firebug e/oi log di Heroku, vedo che in realtà ottengo 404 errori per questi file, anche se il percorso deve corrispondere a ciò che viene fatto localmente. Vale anche la pena ricordare che il javascript di terze parti sta arrivando proprio bene, è solo quando l'attributo src del tag script indica al mio sito che c'è un problema. Cosa devo fare per avere i miei script disponibili?

+2

Non ho mai esaminato le specifiche, ma so che in Rails su Heroku, si mettono/compili le risorse statiche in root/pubblico. Ad esempio, Rails compila '/ assets/base.sass' in'/public/stylesheets/base.css'. Quindi penso che Heroku esponga la directory 'public' come una directory accessibile statica. In genere non è possibile accedere a file arbitrari su server di produzione come si potrebbe essere abituati a nelle app PHP convenzionali. Dovresti specificare una route GET che in realtà serve a quel file heatcanvas.js - ma non vorresti farlo. Sono davvero arrugginito, ma forse cerco di utilizzare la directory 'public'. – danneu

+1

Sul [Cedar stack] (https://devcenter.heroku.com/articles/cedar) le richieste vengono indirizzate al banco prova non disturbato. Quindi spetta all'app/framework servire asset statici. L'unica particolarità della directory 'public' è che l'app/framework Rails serve risorse da lì. Le app Node.js avranno una struttura diversa. –

+0

Puoi includere l'output di 'heroku logs -t' durante una di queste richieste? –

risposta

6

vi consiglio di utilizzare process.cwd) valore (per ottenere directory specifica

process.env.PWD = process.cwd() 

proprio all'inizio dei vostri web.js

consentono di accedere facilmente i file.

Si può fare

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

invece di utilizzare

__dirname 

Attenzione: Assicurarsi di eseguire web.js nella directory principale di web.js (web.js Heroku vengono eseguiti in questo modo)

+1

Grazie, questo mi ha aiutato così tanto!Non sono sicuro che l'OP abbia la stessa configurazione, ma sto usando Heroku con diversi dynos, e risulta che non puoi usare 'app.use (... __dirname + '/ path');', come ho fatto localmente . Devi invece usare 'process.env.PWD'. – Gromix

+0

Come sembra, questo non funziona per me! Heroku pre-aggiunge sempre una cartella denominata "app", quindi pensa che il mio server.js (in root) si trovi in ​​una cartella chiamata "app". Testare localmente va bene. – Pille

+0

iam nello stesso stato Pille come hai corretto gli eventi di questa cartella predefinita in questo ambito (locale è sempre ok anche per me) – dewelloper

Problemi correlati