【问题标题】:Running Hugo from a PHP exec() function从 PHP exec() 函数运行 Hugo
【发布时间】:2018-06-21 10:45:32
【问题描述】:

我正在尝试在 LAMP 堆栈服务器上为 Hugo 设置持续部署脚本,而我遇到的最后一个问题是让 Hugo 运行。

背景

我在 VPS 上安装了 Hugo 和 PHP,对于我的应用,有两个目录:

  1. public,我的实际网站所在的位置。
  2. hugo,我的整个 Hugo 设置都是从​​ GitHub 中提取的。

当我合并到 master 分支时,我正在使用 GitHub webhook ping 我的 deploy.php 脚本。这是该脚本的相关部分:

// 1. Pull the latest build from GitHub
exec('cd /path/to/hugo && git fetch --all && git reset --hard origin/master');

// 2. Run Hugo to compile any new posts and pages into HTML
exec('cd /path/to/hugo && hugo');

// 3. Copy the files in the /public directory from Hugo into the /public app directory
exec('cd /path/to/hugo && cp -r /path/to/hugo/public/. public');

发生了什么

项目 1 和 3 运行。第 2 项没有。

更明确地说:最新的构建来自 GitHub,我提前构建的任何文件都从 Hugo 构建复制到 /public 目录中。

不过,我无法让 hugo 通过 exec() 运行,而且我不完全确定原因。

如果我在终端窗口中通过 SSH 连接到服务器,cd 进入 /path/to/hugo 目录,然后在那里运行 hugo,一切都按预期编译,这样就消除了诸如“可能 Hugo 安装错误”或“也许在那个目录中无法访问 Hugo”。

那么...我错过了什么?提前致谢!

【问题讨论】:

    标签: php git github continuous-deployment hugo


    【解决方案1】:

    检查这是否是路径问题,这意味着默认情况下,bash 会话不会仅仅因为您位于正确的文件夹中而执行程序:您必须指定其路径(在您的情况下:当前文件夹)

    这意味着:将&& hugo 替换为&& ./hugo

    或者,就像OP Chris Ferdinandi 所做的那样 (comments),您可以使用绝对路径:

    我 ssh-ed 进入服务器并运行 which hugo 以获取适当的路径,并将 && hugo 替换为该路径。

    【讨论】:

    • 做到了!太感谢了。对于其他阅读本文的人,我 ssh-ed 进入服务器并运行 which hugo 以获取适当的路径,并将 && hugo 替换为该路径。
    • @ChrisFerdinandi 干得好!我已将您的评论包含在答案中以提高知名度。
    • 干杯!我是一名前端人员,正在摸索一些后端的东西(可怕的话,对吧?),非常感谢您的帮助!
    • @ChrisFerdinandi 没问题:我们所有都在摸索所有东西 ;-)
    猜你喜欢
    • 1970-01-01
    • 2015-05-16
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 2015-02-23
    • 2011-01-07
    • 1970-01-01
    相关资源
    最近更新 更多