Вопрос по express, node.js, javascript – Heroku (Cedar) + Node + Express + Jade Клиентские javascript-файлы в подкаталоге работают локально с foreman + curl, но не при нажатии на Heroku

9

Я очень плохо знаком с нодой и герою и подозреваю, что это какая-то простая проблема с разрешениями и т. Д., Но я не могу отследить ее.

У меня есть несколько файлов чистого javascript в подкаталоге на один уровень ниже моего корневого каталога, где находится мой файл web.js. У меня есть строка в моем файле web.js, чтобы указать каталог

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

Если я запускаю свое приложение локально с Heroku Foreman, я получаю ожидаемый ответ js при выполнении следующей команды curl

<code> curl localhost:5000/heatcanvas/heatcanvas.js
</code>

Однако, когда я нажимаю на Heroku и нажимаю соответствующий URL в браузере

<code>www.example.com/heatcanvas/heatcanvas.js
</code>

Я получаю следующее:

<code> Cannot GET /heatcanvas/heatcanvas.js
</code>

Если я проверяю журналы Firebug и / или Heroku, я вижу, что на самом деле я получаю 404 ошибки для этих файлов, хотя путь должен соответствовать тому, что делается локально. Стоит также упомянуть, что сторонний javascript подходит просто отлично, только когда атрибут src тега script указывает на мой сайт, возникает проблема. Что мне нужно сделать, чтобы мои скрипты были доступны?

Это твойapp.use() вapp.configure() блок, который не работает на Heroku? Вы должны специально запустить$ heroku config:add NODE_ENV=* чтобы Express знал, какую среду использовать. swider
Можете ли вы включить выводheroku logs -t во время одного из этих запросов? Ryan Daigle
Я никогда не изучал специфику, но я знаю, что в Rails на Heroku вы помещаете / компилируете свои статические ресурсы в root / public. Например, Rails компилиру/assets/base.sass в/public/stylesheets/base.css. Поэтому я думаю, что Heroku разоблачаетpublic dir как статический доступный dir. Обычно вы не можете получить доступ к произвольным файлам на производственных серверах, к которым вы привыкли в обычных приложениях PHP. Вам нужно указать маршрут GET, который фактически обслуживает этот файл heatcanvas.js - но вы не захотите этого делать. Я действительно ржавый, но, возможно, попытаться использоватьpublic реж. danneu
На Кедровая стопка запросы направляются на динамо без помех. Таким образом, приложение / инфраструктура должны обслуживать статические ресурсы. Единственное спец оpublic каталог - это то, что Rails app / framework обслуживает ресурсы оттуда. Приложения Node.js будут иметь другую структуру. Ryan Daigle

Ваш Ответ

1   ответ
6

Я рекомендую использовать Process.cwd () значение, чтобы получить конкретный каталог

process.env.PWD = process.cwd()

в самом начале твоего Web.js

ты легко получаешь доступ к файлам.

Ты можешь сделат

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

вместо использовани

__dirname

Предупреждение Обязательно запустите web.js в корневом каталоге web.js (Heroku web.js выполняется таким образом)

iam в том же состоянии, Пилле, как ты исправил события папки по умолчанию для этого приложения в этой области (локальный тоже всегда в порядке) dewelloper
Как мне кажется, это не работает для меня! Heroku всегда предварительно добавляет папку с именем app, поэтому она считает, что мой server.js (в корне) находится в папке с именем app. Локальное тестирование в порядке. Pille
Спасибо, это мне очень помогло! Не уверен, что у OP такая же настройка, но я использую Heroku с несколькими динамо, и оказывается, что вы не можете использоватьapp.use(... __dirname+'/path');, как я сделал на местном уровне. Вы должны использоватьprocess.env.PWD вместо. Gromix

Похожие вопросы