【问题标题】:Automated heroku deploy from subfolder从子文件夹自动部署heroku
【发布时间】:2017-01-04 23:00:11
【问题描述】:

我知道你可以从 github 自动部署到 heroku,但我还没有找到一种方法只将一个子文件夹从 github 推送到 heroku。

从命令行我知道可以这样做:

git subtree push --prefix <subfolder> heroku master

但是,我想知道是否有一种方法可以使用 github 与 heroku 的集成,以便在将提交添加到分支时自动拉取特定的子文件夹。

【问题讨论】:

    标签: git heroku github deployment web-deployment


    【解决方案1】:

    2018 年更新!要使用 heroku 启用自动部署,您需要对要部署的 github 存储库具有 admin 访问权限。

    在 Heroku 仪表板中:

    步骤 1) - 将 github 存储库连接到 Heroku

    在“部署”选项卡中,滚动到“部署方法”并连接您的 Github 帐户。找到回购并点击连接。 heroku 现在应该在你的 github 中被授权为 Oauth 应用程序。

    如果你找不到 repo: 要么是你的 github 没有授权 Heroku,要么你没有创建这个 repo,需要确保你有管理员权限。如果这不可行,请转到 Heroku Dashboard 中的访问选项卡并将管理员添加为协作者,邀请 repo 管理员加入您的 heroku 应用程序。然后管理员登录 heroku 并在此处完成第 1 步。之后您可以完成以下步骤。

    步骤 2) - 将 Heroku Config Var PROJECT_PATH 设置为您的服务器文件夹

    在“设置”选项卡中,设置一个配置变量来告诉 Heroku 找到您要部署的服务器代码的路径。

    示例: 假设您的仓库名称是 MyRepo,它有 2 个子文件夹。 back-end 包含一个 Node.js 服务器,front-end 包含一个 React 应用程序。你的 github 目录如下所示:

    MyRepo/front-end/package.json MyRepo/back-end/package.json

    然后您应该将您的配置变量设置为左侧框中的PROJECT_PATH 和右侧框中的back-end

    步骤 3) - 设置一个 Heroku Buildpack 来部署 PROJECT_PATH 文件夹

    再次在“设置”选项卡中,您需要添加一个 Buildpack,它会告诉 heroku 查找您的文件夹,而不是部署 repo 根目录。那里应该已经有 1 个 buildpack 来告诉 heroku 它是什么类型的服务器(javascript/node.js、python/django 等)。

    输入此 url 以添加 buildpack https://github.com/timanovsky/subdir-heroku-buildpack.git确保它位于 buildpack 链的顶部(拖动左侧的行使其高于您添加的任何其他 buildpack。

    步骤 4) - 启用自动部署

    在“部署”选项卡中,滚动到“自动部署”并单击黑色按钮以启用自动部署

    自动部署完成!现在检查构建日志并确保没有任何错误

    【讨论】:

    • 非常感谢您使用 heroku 网站而不是命令行
    • 前端如何到达后端?
    • @LupyanaMbembati 本指南与在多目录 github 存储库中持续部署单个目录严格相关。如果你想连接前端和后端,你可以使用一个 heroku 管道或多个 heroku 应用程序,为不同应用程序提供前端和后端服务,并使用 REST 连接两者。我个人将 netlify 用于前端,将 heroku 用于后端,但有时我喜欢将所有代码放在一个存储库中。
    • 如果我能给这两个赞成票,我会的。效果很好!
    • 您好,我如何使用 heroku 管道连接前端和后端 - 如果我在一个带有上述两个文件夹的存储库中上传所有内容? @noxasaxon
    【解决方案2】:

    我能够让它工作。我有一个带有 Python Flask 应用程序的 server 子文件夹,我想使用 GitHub 集成自动部署它。

    Heroku 使用构建包来检测项目的语言和框架。更多关于 here.

    我找到了我的 buildpack here 的源代码。然后你只需要看看检测脚本。对于 python 它checks requirements.txt 文件,所以我使用ln -s server/requirements.txt requirements.txt 做了一个符号链接。

    我的 Procfile 如下所示:web: gunicorn --pythonpath server/api app:app

    现在一切正常!

    【讨论】:

      【解决方案3】:

      为了从子文件夹进行自动部署,我所做的是在 GitHub 中创建一个新分支并推送 JUST 子文件夹,然后将 Heroku 设置为自动部署到该分支。

      使用git subtree push --prefix &lt;subfolder&gt; origin &lt;branch&gt; 将子文件夹推送到该分支

      【讨论】:

      • 值得注意的是,这会导致依赖于同级包/工作区的应用程序出现问题。
      • 值得注意的是,这是 4 年前的解决方案,应该与一粒盐一起服用。
      • 抱歉,如果我的语气充满敌意,请在此处留下评论,因为今天在谷歌上搜索此问题的解决方案会导致(当前/迄今为止)使用 git subtree x。认为对于考虑它的其他流浪者来说值得一提。
      【解决方案4】:

      到目前为止,部署子目录最简单的方法是使用 Netlify -- 登录,然后将根文件夹拖到“站点”下的拖放区域,然后在设置 -> 构建和部署 -> 持续部署 - > 构建设置(首先将 Netlify 连接到 Github 存储库)您将在基本目录字段中输入子目录名称(无斜杠),然后在构建命令字段中输入 CI= npm run build,最后在发布目录字段中输入 yourSubdirectoryName/build。保存然后触发另一个部署。

      【讨论】:

        【解决方案5】:

        我认为现在 noxasaxon 的这个答案存在问题

        在第 2 步)中,您不应在 PROJECT_PATH 中放置 MyRepo/front-end/package.json 。但是在路径变量中只是front-end,它会起作用。更多信息在这里https://github.com/timanovsky/subdir-heroku-buildpack/issues/5

        【讨论】:

          【解决方案6】:

          测试这个解决方案:

          在环境变量集中

          PROJECT_PATH 
          

          <repo relative path to the subfolder>
          

          为什么?我注意到了

          git subtree push --prefix <subfolder> Heroku master
          

          会自动执行此操作,Heroku 很有可能会执行此操作来设置子文件夹的路径。 有了这个,您可以将 repo 设置为自动部署并声明子文件夹路径。他们真的应该努力使这一点更加明显。

          【讨论】:

            猜你喜欢
            • 2018-02-09
            • 2017-05-16
            • 1970-01-01
            • 2021-07-12
            • 2019-02-13
            • 1970-01-01
            • 2012-06-17
            • 2012-12-11
            • 2020-02-08
            相关资源
            最近更新 更多