我怎样才能使 heroku/nodejs buildpack 将 yarn 日志转储到控制台而不是 tmp 文件?
How can I make heroku/nodejs buildpack dump yarn logs into console instead of a tmp file?
一切都在问题中,但这里有一些细节。我有一个像这样的 monorepo 结构,建立在 yarn 工作区上:
my_app/
├─ node_modules/
├─ packages/
│ ├─ backend/
│ │ ├─ package.json/
│ │ ├─ Procfile/
│ ├─ frontend/
│ │ ├─ package.json/
│ │ ├─ Procfile/
│ ├─ common/
│ │ ├─ package.json/
├─ package.json/
├─ yarn.lock/
backend
和 frontend
各自依赖 common
,但不相互依赖。
backend
和 frontend
需要部署到 Heroku。我使用 heroku/heroku-buildpack-multi-procfile buildpack 为每个应用程序设置一个 Procfile。所以后端的构建包是:
1. heroku/nodejs
2. heroku-community/multi-procfile
对于前端:
1. mars/create-react-app
2. heroku-community/multi-procfile
Note: mars/create-react-app uses heroku/nodejs for its build step, so it looks like the issue is with that one.
当我按下它们中的每一个时,它们会导致与 Yarn 的 link 步骤相同的错误:
remote: ➤ YN0000: ┌ Link step
remote: ➤ YN0062: │ fsevents@patch:fsevents@npm%3A2.3.2#~builtin<compat/fsevents>::version=2.3.2&hash=1cc4b2 The platform linux is incompatible with this module, link skipped.
remote: ➤ YN0062: │ fsevents@patch:fsevents@npm%3A1.2.13#~builtin<compat/fsevents>::version=1.2.13&hash=1cc4b2 The platform linux is incompatible with this module, link skipped.
remote: ➤ YN0008: │ my-app@workspace:. must be rebuilt because its dependency tree changed
remote: ➤ YN0008: │ bcrypt@npm:5.0.1 must be rebuilt because its dependency tree changed
remote: ➤ YN0008: │ @nestjs/core@npm:8.1.1 [496a1] must be rebuilt because its dependency tree changed
remote: ➤ YN0009: │ my-app@workspace:. couldn't be built successfully (exit code 127, logs can be found here: /tmp/xfs-9791b677/build.log)
remote: ➤ YN0000: └ Completed in 7s 955ms
remote: ➤ YN0000: Failed with errors in 1m 11s
如您所见,它似乎试图构建根工作区(可能这就是构建 common
的方式?)但失败了。它将其日志转储到一个文件中,但据我所知,不可能看到在构建过程中生成的文件。
下面是我的问题:
- 有没有办法让它在控制台中显式转储日志?
- 如何在本地模拟相同的部署过程?我查看了 Heroku CLI 文档和 heroku/nodejs,但发现只有 运行 上的日志,没有部署。
感谢您一路来到这里!我必须提到我昨天开始使用 Heroku,所以我可能仍然遗漏了一些明显的东西 - 他们的日志很容易迷失。这不是我第一次使用托管软件,我了解他们的总体架构。
我终于明白了如何在本地模拟该过程:heroku/nodejs 实际上记录了它运行的每个步骤和每个命令。您可以找到它们,如果您在仪表板中转到您的应用程序 -> Activity -> 查看构建日志(在其中一个失败的日志上)。
在我的例子中 yarn workspaces focus --all --production
失败了,问题是我有一个 postinstall
脚本正在安装 husky,但 husky 本身是一个开发依赖项。我将安装后脚本更改为 prepare
,这是仅在开发人员上运行的安装后脚本,它解决了问题。
一切都在问题中,但这里有一些细节。我有一个像这样的 monorepo 结构,建立在 yarn 工作区上:
my_app/
├─ node_modules/
├─ packages/
│ ├─ backend/
│ │ ├─ package.json/
│ │ ├─ Procfile/
│ ├─ frontend/
│ │ ├─ package.json/
│ │ ├─ Procfile/
│ ├─ common/
│ │ ├─ package.json/
├─ package.json/
├─ yarn.lock/
backend
和 frontend
各自依赖 common
,但不相互依赖。
backend
和 frontend
需要部署到 Heroku。我使用 heroku/heroku-buildpack-multi-procfile buildpack 为每个应用程序设置一个 Procfile。所以后端的构建包是:
1. heroku/nodejs
2. heroku-community/multi-procfile
对于前端:
1. mars/create-react-app
2. heroku-community/multi-procfile
Note: mars/create-react-app uses heroku/nodejs for its build step, so it looks like the issue is with that one.
当我按下它们中的每一个时,它们会导致与 Yarn 的 link 步骤相同的错误:
remote: ➤ YN0000: ┌ Link step
remote: ➤ YN0062: │ fsevents@patch:fsevents@npm%3A2.3.2#~builtin<compat/fsevents>::version=2.3.2&hash=1cc4b2 The platform linux is incompatible with this module, link skipped.
remote: ➤ YN0062: │ fsevents@patch:fsevents@npm%3A1.2.13#~builtin<compat/fsevents>::version=1.2.13&hash=1cc4b2 The platform linux is incompatible with this module, link skipped.
remote: ➤ YN0008: │ my-app@workspace:. must be rebuilt because its dependency tree changed
remote: ➤ YN0008: │ bcrypt@npm:5.0.1 must be rebuilt because its dependency tree changed
remote: ➤ YN0008: │ @nestjs/core@npm:8.1.1 [496a1] must be rebuilt because its dependency tree changed
remote: ➤ YN0009: │ my-app@workspace:. couldn't be built successfully (exit code 127, logs can be found here: /tmp/xfs-9791b677/build.log)
remote: ➤ YN0000: └ Completed in 7s 955ms
remote: ➤ YN0000: Failed with errors in 1m 11s
如您所见,它似乎试图构建根工作区(可能这就是构建 common
的方式?)但失败了。它将其日志转储到一个文件中,但据我所知,不可能看到在构建过程中生成的文件。
下面是我的问题:
- 有没有办法让它在控制台中显式转储日志?
- 如何在本地模拟相同的部署过程?我查看了 Heroku CLI 文档和 heroku/nodejs,但发现只有 运行 上的日志,没有部署。
感谢您一路来到这里!我必须提到我昨天开始使用 Heroku,所以我可能仍然遗漏了一些明显的东西 - 他们的日志很容易迷失。这不是我第一次使用托管软件,我了解他们的总体架构。
我终于明白了如何在本地模拟该过程:heroku/nodejs 实际上记录了它运行的每个步骤和每个命令。您可以找到它们,如果您在仪表板中转到您的应用程序 -> Activity -> 查看构建日志(在其中一个失败的日志上)。
在我的例子中 yarn workspaces focus --all --production
失败了,问题是我有一个 postinstall
脚本正在安装 husky,但 husky 本身是一个开发依赖项。我将安装后脚本更改为 prepare
,这是仅在开发人员上运行的安装后脚本,它解决了问题。