在 Heroku 上部署 Nodejs 无法提供位于子文件夹中的静态文件

Posted

技术标签:

【中文标题】在 Heroku 上部署 Nodejs 无法提供位于子文件夹中的静态文件【英文标题】:Deploy Nodejs on Heroku fails serving static files located in subfolders 【发布时间】:2013-06-17 05:59:50 【问题描述】:

我正在使用 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 的问题,但我找不到原因。以前有人遇到过这个问题吗?解决方案?

谢谢!

【问题讨论】:

【参考方案1】:

我终于找到了解决方案。

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


    "name": "bla",
    "version": "0.0.1",
    "dependencies": 
        "express": "3.2.6"
    ,
    "engines": 
        "node": "0.10.11",
        "npm": "1.2.25"
     

【讨论】:

【参考方案2】:

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

替代方案似乎是:

// 在 web.js 的顶部 process.env.PWD = process.cwd()

// 然后 app.use(express.static(process.env.PWD + '/htdocs'));

【讨论】:

嘿!我已经找到了,但没有工作......但我现在真的找到了灵魂!这只是我的 package.json,我忘了放 npm 版本,我不知道为什么,但这解决了整个问题。谢谢! 我猜这是因为 Heroku 需要它来下载正确版本的 NPM。默认情况下,它应该下载一个非常旧的。我们不知道那时应该发生什么:) 我已经向 package.json 添加了一个 npm 版本,并做了这个解决方案。还是不行。【参考方案3】:

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

确保您的目录的子目录已添加到您的 Git 存储库中。

【讨论】:

这对我有用。我忽略了 .gitignore 中的 /dist 目录。我删除了它,静态文件链接按预期工作。 我也一样,现在我知道 .gitignores 做了什么:P【参考方案4】:

我通过从 .gitignore 文件中删除公用文件夹解决了我的问题。我不知道它在那里做什么。

【讨论】:

【参考方案5】:

我为此苦苦挣扎了一段时间,不得不恢复使用 /public(来自 /dist)作为静态文件夹 - 现在完美运行

【讨论】:

【参考方案6】:

在我的例子中,我的构建中有一个步骤实际上是清除 /public 文件夹,然后重新添加到 bundle.js 和 bundle.css。

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

【讨论】:

以上是关于在 Heroku 上部署 Nodejs 无法提供位于子文件夹中的静态文件的主要内容,如果未能解决你的问题,请参考以下文章

无法将 nodejs 应用程序部署到 heroku

在 Heroku 上部署 React 和 Django

带有 Gmail 服务的 Nodemailer 无法在 heroku 上运行

在 Heroku 上部署 Nodejs + MongoDB,但安装插件时需要验证信用卡

将 nodejs/mongoose 部署到 heroku

Heroku:NodeJS Express 服务器无法提供图像