2013-06-20 11 views
15

我正在使用Heroku部署NodeJs应用程序。一切工作正常,除了一个小问题提供静态文件。在Heroku上部署Nodejs失败,服务位于子文件夹中的静态文件

我有以下的配置

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

它的工作原理,除了当我尝试担任位于子文件夹的静态文件的罚款。

www.example.com/bar.js //此提供文件/htdocs/bar.js

www.example.com/foo/bar.js //这不能找到文件 /htdocs/foo/bar.js

我忘了说,在我的当地环境,一切工作正常,可能是一些与Heroku的,但我找不到原因。以前有人有过这个问题吗?解决方案?

谢谢!

回答

12

最后我找到了解决方案。

我解决了在我的package.json中添加npm版本的问题。

{ 
    "name": "bla", 
    "version": "0.0.1", 
    "dependencies": { 
     "express": "3.2.6" 
    }, 
    "engines": { 
     "node": "0.10.11", 
     "npm": "1.2.25" 
    } 
} 
+2

没有解决我的问题,仍在研究... –

10

显然,正如在这个问题中的解释:Heroku(Cedar) + Node + Express + Jade Client-side javascript files in subdirectory work locally with foreman+curl but not when pushed to Heroku,你不能在Heroku中使用__dirname。

替代似乎是:

//在你web.js
process.env.PWD = process.cwd()

//然后
应用程序的顶部。使用(express.static(process.env.PWD +'/ htdocs'));

+0

嘿!我已经发现,并没有工作......但我现在实际上发现了灵魂!这只是我的package.json,我忘了放置npm版本,我不知道为什么,但是这解决了整个事情。谢谢! – ius

+0

哦,好的。好消息 ! –

+0

我想这是因为Heroku需要它来下载正确版本的NPM。并且默认情况下它应该下载一个非常旧的。我们不知道应该发生什么:) –

0

我这个挣扎了一会儿,不得不恢复为静态文件夹使用/公有(/ DIST) - 现在

0

完美的作品对我来说,我在我的构建步骤那实际上是消除了/public文件夹,然后重新添加到bundle.js和bundle.css中。

所以在我的本地我没有看到它,但是当它被部署到Heroku时,资产缺失。

5

如果这些解决方案都不起作用,请检查my solution

确保您的目录的子目录添加到您的Git仓库。

+2

这对我有效。我忽略了.gitignore中的我的/ dist目录。我删除它,静态文件链接按预期工作。 – mepler

+0

我也一样,现在我知道什么.gitignores确实:P – John