【问题标题】:Gatsby Build fails on Netlify by works locally. Ffmpeg dependency issueGatsby Build 在 Netlify 上通过本地工作失败。 ffmpeg 依赖问题
【发布时间】:2021-04-26 01:57:05
【问题描述】:

我正在尝试在 Netlify 上部署我的网站,gatsby build 命令在我的系统上运行良好。但是当我在 Netlify 上运行时,我遇到了如下所示的问题。

未处理的拒绝:找不到 ffprobe 似乎是问题所在。我认为这是因为我的系统(macOS)上安装了 ffmpeg,但在 Netlify 的构建过程中没有安装过程。有人可以指导我如何解决这个问题吗?

1:19:18 AM: info bootstrap finished - 5.299 s
1:19:18 AM: ⠀
1:19:22 AM: error UNHANDLED REJECTION Cannot find ffprobe
1:19:23 AM: 
1:19:23 AM:   Error: Cannot find ffprobe
1:19:23 AM:   
1:19:23 AM:   - ffprobe.js:145 
1:19:23 AM:     [repo]/[fluent-ffmpeg]/lib/ffprobe.js:145:31
1:19:23 AM:   
1:19:23 AM:   - capabilities.js:194 
1:19:23 AM:     [repo]/[fluent-ffmpeg]/lib/capabilities.js:194:9
1:19:23 AM:   
1:19:23 AM:   - async.js:52 
1:19:23 AM:     [repo]/[async]/lib/async.js:52:16
1:19:23 AM:   
1:19:23 AM:   - async.js:1209 
1:19:23 AM:     [repo]/[async]/lib/async.js:1209:30
1:19:23 AM:   
1:19:23 AM:   - capabilities.js:186 
1:19:23 AM:     [repo]/[fluent-ffmpeg]/lib/capabilities.js:186:13
1:19:23 AM:   
1:19:23 AM:   - capabilities.js:123 
1:19:23 AM:     [repo]/[fluent-ffmpeg]/lib/capabilities.js:123:9
1:19:23 AM:   
1:19:23 AM:   - async.js:52 
1:19:23 AM:     [repo]/[async]/lib/async.js:52:16
1:19:23 AM:   
1:19:23 AM:   - async.js:1209 
1:19:23 AM:     [repo]/[async]/lib/async.js:1209:30
1:19:23 AM:   
1:19:23 AM:   - capabilities.js:116 
1:19:23 AM:     [repo]/[fluent-ffmpeg]/lib/capabilities.js:116:11
1:19:23 AM:   
1:19:23 AM:   - utils.js:223 
1:19:23 AM:     [repo]/[fluent-ffmpeg]/lib/utils.js:223:16
1:19:23 AM:   
1:19:23 AM:   - which.js:68 F
1:19:23 AM:     [repo]/[which]/which.js:68:16
1:19:23 AM:   
1:19:23 AM:   - which.js:80 E
1:19:23 AM:     [repo]/[which]/which.js:80:29
1:19:23 AM:   
1:19:23 AM:   - which.js:89 
1:19:23 AM:     [repo]/[which]/which.js:89:16
1:19:23 AM:   
1:19:23 AM:   - index.js:42 
1:19:23 AM:     [repo]/[isexe]/index.js:42:5
1:19:23 AM:   
1:19:23 AM:   - mode.js:8 
1:19:23 AM:     [repo]/[isexe]/mode.js:8:5
1:19:23 AM:   
1:19:23 AM: 
1:19:23 AM: not finished run queries - 4.168s
1:19:23 AM: not finished Generating image thumbnails - 4.111s
1:19:23 AM: (sharp:1520): GLib-CRITICAL **: 16:19:23.397: g_hash_table_lookup: assertion 'hash_table != NULL' failed
1:19:23 AM: (sharp:1520): GLib-CRITICAL **: 16:19:23.438: g_hash_table_lookup: assertion 'hash_table != NULL' failed
1:19:23 AM: Skipping functions preparation step: no functions directory set
1:19:23 AM: Caching artifacts
1:19:23 AM: Started saving node modules
1:19:23 AM: Finished saving node modules
1:19:23 AM: Started saving pip cache
1:19:23 AM: Finished saving pip cache
1:19:23 AM: Started saving emacs cask dependencies
1:19:23 AM: Finished saving emacs cask dependencies
1:19:23 AM: Started saving maven dependencies
1:19:23 AM: Finished saving maven dependencies
1:19:23 AM: Started saving boot dependencies
1:19:23 AM: Finished saving boot dependencies
1:19:23 AM: Started saving go dependencies
1:19:23 AM: Finished saving go dependencies
1:19:27 AM: Error running command: Build script returned non-zero exit code: 1
1:19:27 AM: Failing build: Failed to build site
1:19:27 AM: failed during stage 'building site': Build script returned non-zero exit code: 1
1:19:27 AM: Finished processing build request in 1m15.231125909s

我的gatsby-config.js文件如下:

module.exports = {
  siteMetadata: {
    title: "#######",
    author: "#######"
  },
  plugins: [
    "gatsby-plugin-sass",
    {
      resolve: "gatsby-source-filesystem",
      options: {
        name: "images",
        path: `${__dirname}/src/images`
      }
    },
    "gatsby-transformer-sharp",
    "gatsby-plugin-sharp",
    "gatsby-transformer-ffmpeg",
    "gatsby-plugin-ffmpeg"
  ]
}

【问题讨论】:

  • 您是否尝试过运行gatsby clean 来尝试在本地复制问题?通常,如果您在 Netlify 上看到它失败但不是在本地,您可能在 .cachepublic 中缓存了一些内容,从而阻止了问题的出现。当 Netlify 构建时,它会在构建之前npm install,所以如果它在你的包中,它应该把它捡起来。

标签: ffmpeg web-deployment gatsby netlify


【解决方案1】:

Netlify 的构建镜像runs Ubuntu,所以你大概可以使用以下命令安装ffmpeg

apt-get install ffmpeg

您可以将此脚本添加到您的 Netlify 构建命令中,即

apt-get install ffmpeg && npm run build

或将其作为新脚本粘贴到您的 package.json 中。


在Ubuntu上构建最新版ffmpeg的说明:https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu

【讨论】:

  • 谢谢!我询问了 Netlify 社区,他们说事先在 .cache 文件夹中安装操作系统特定的二进制文件,或者在构建命令中运行 bash 脚本。我最终使用了一个根本不需要 ffmpeg 的不同插件,但我相信上面提到的方法是正确的解决方案,以防其他人遇到这个问题。
  • 啊,这些都是很好的解决方案——我忘了​​ Netlify 构建插件——你可以很好地构建一个插件,在运行构建脚本之前预安装 ffmpeg!
  • E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied) 4:56:32 AM: E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root? 好像没有 sudo 就行不通
【解决方案2】:

很遗憾,您不能使用 apt-get install 向 Netlify 的构建映像添加其他依赖项。 This help article 建议下载静态二进制文件以解决此限制。

fluent-ffmpeg 包(由gatsby-plugin-ffmpeg 使用)使用环境变量FFMPEG_PATHFFPROBE_PATH 来查找它所依赖的可执行文件。

我下载了 FFmpeg 的静态版本并将其添加到我的 gatsby 项目中。然后,我能够为 FFMPEG_PATHFFPROBE_PATH 变量使用正确的路径,并将两者都添加到我的 Netlify 构建环境中。这解决了我的构建错误。

【讨论】:

    猜你喜欢
    • 2021-07-31
    • 2021-03-08
    • 2017-03-04
    • 2019-09-29
    • 2019-07-03
    • 2020-10-23
    • 2021-04-21
    • 1970-01-01
    • 2012-10-11
    相关资源
    最近更新 更多