我在IBM上测试CloudFoundry并且正在运行NodeJS。
尝试cf push
我的应用时遇到以下错误:
failed: The app upload is invalid: Symlink(s) point outside of root folder
在我的appllcation中,我有以下代码:
return res.sendFile(path.join(__dirname +'/tvshows/'+ guide +'.html'));
不使用path.join时,只需使用:
return res.sendFile(path.join('./tvshows/'+ guide +'.html'));
我得到了这个错误:
TypeError: path must be absolute or specify root to res.sendFile
怎么办?
我也试过像path.join((process.env.BUILD_DIR || __dirname),
和return res.sendFile('index.html', { root: path.join(__dirname, 'tvshows', guide) });
这样的东西,但没有运气。
答案 0 :(得分:2)
失败来自我的node_modules
文件夹。
使用.cfignore
添加node_modules/
可解决此问题。
答案 1 :(得分:2)
您没有提及您正在使用的cf
cli的版本,但我认为这是从版本6.34.0开始的预期行为。
push现在保留app文件中的相对符号链接。这使得使用npm链接更容易使用Node.js应用程序,但请注意,当它检测到指向app文件夹外部的符号链接时,它现在出错(例如,包含外部符号链接的node_modules文件夹)。
https://github.com/cloudfoundry/cli/releases/tag/v6.34.0
我认为你正在进入第二部分,"当它检测到指向app文件夹外的符号链接时的错误"。它与应用程序中的代码无关,而是在项目文件夹中的某个位置有一个符号链接,它引用了另一个不在项目根目录下的文件。
如果您使用的是类似unix的系统,则可以运行find . -type l
来查找当前目录下的所有符号链接。然后你只需要确定哪一个指向项目根目录之外。
选项是删除该符号链接,将其指向项目根目录下的某些内容,或使用.cfignore
忽略该文件(这是您最终要做的)。
希望有所帮助!