如何在Heroku上安装man

时间:2018-01-21 07:01:11

标签: node.js heroku apt-get man

我的应用程序需要包man,但默认情况下它不会安装在heroku / nodejs buildpack上。

因此,根据the documentation,当您的应用需要其他相关依赖项时,heroku/heroku-buildpack-apt是工作的工具。

我分配了新的buildpack,并在项目的根目录中添加了Aptfile一行:

man

这是我的完整包.json

{
  "name": "unix-translator",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www",
    "test": "mocha --exit"
  },
  "dependencies": {
    "body-parser": "~1.18.2",
    "cookie-parser": "~1.4.3",
    "debug": "~2.6.9",
    "express": "~4.15.5",
    "jade": "~1.11.0",
    "morgan": "~1.9.0",
    "node-dev": "^3.1.3",
    "serve-favicon": "~2.4.5",
    "dateTools": "file:lib/unix-command"
  },
  "devDependencies": {
    "chai": "^4.1.2",
    "mocha": "^4.1.0"
  }
}

这是我的Procfile:

web: node ./bin/www

这会成功安装依赖项,因为我现在运行which man时会看到它。但它不起作用。

当我尝试使用 man程序时出现此错误:

~ $ man cat
man: error while loading shared libraries: libmandb-2.7.5.so: cannot open shared object file: No such file or directory

我确实找到了this blog postthis other blog post,它们都提出了与权限和文件位置相关的问题...我已连接到我的dyno并运行:/sbin/ldconfig -v并最终抛出这个错误:

/sbin/ldconfig.real: Can't create temporary cache file /etc/ld.so.cache~: Read-only file system

^该命令需要与sudo一起运行,并且在dyno中不可用。 :-( 所以我再次陷入困境。

1 个答案:

答案 0 :(得分:0)

不是100%肯定,但这可能值得一试: 用heroku-prebuild(或heroku-postbuild)替换package.json中的“prestart”,如下所示:

"scripts": {
   "start": "node ./bin/www",
   "test": "mocha --exit",
   "heroku-prebuild": "apt-get update && apt-get install man"
},

你在“prestart”中有这个,这意味着你在运行npm start时会执行它。 但是,根据您的问题,您似乎正在访问one-off Heroku dyno(例如使用“heroku run bash”),然后尝试在其中运行“man cat”。因此,当你这样做时,你的dyno上根本没有运行“npm start”。 通过将“apt-get”放在Heroku specific build steps中的一个中,它会在slug构建时执行,因此您应用的任何dyno都应该可以使用您安装的任何内容(包括一次性dynos) )。