【问题标题】:Composer, Git And Deployment WorkflowComposer、Git 和部署工作流程
【发布时间】:2014-12-04 18:15:39
【问题描述】:

这更像是一个关于 Git 的一般性问题,但我将它应用于 SS,所以我想我会在这里问。我是一名学习 Git 的设计师。

我正在寻找开发环境和实时服务器的最佳工作方式。我现在的设置是在本地使用 composer 和 GitHub for Mac 在我的 Mac 上处理项目。然后我使用Beam 部署到实时服务器。

我遇到的问题是我无法将 SS 模块提交到我的项目仓库。使用 GitHub for Mac,它说“未能将 module-name 添加到索引”。我仍然不清楚为什么会这样。因为它们是 git 的子模块?

所以我所做的是使用 Beam 将主题、自定义代码等内容部署到实时服务器,然后从实时服务器登录并运行 composer 来安装和更新模块。如果我可以从我的开发服务器实时推送所有内容,而不必在实时服务器上登录和运行作曲家命令,那将是理想的。这也有助于那些在糟糕的共享主机上没有安装 composer 的客户站点。

那么有没有一种解决方法或更好的方法可以部署到我不知道的实时服务器上?

【问题讨论】:

    标签: silverstripe


    【解决方案1】:

    我使用composer 管理模块,并将composer.jsoncomposer.lock 添加到您的git repo 并将所有模块目录添加到.gitignore。使用 Composer,您可以在以后轻松更新框架和模块。

    您可以使用capistranogit hooks 之类的方式自动执行某些部署。

    Capistrano 在您身边工作,它登录实时服务器、拉动并为您完成一些工作。在野外有一些用于 SilverStripe 的 capistrano 收据。它有一些优点(例如,每个版本的目录,轻松回滚,每个版本的数据库备份等......),但对我来说,对于我想快速部署真正的修补程序的非常简单的网站来说,感觉有点矫枉过正。

    使用 git 钩子,您仍然需要登录实时服务器,转到您的 webroot 并运行 git pull。然后 git 将从 repo 中提取您的最新更改并为您做一些工作。我正在运行这个git post-merge hook for SilverStripe(只需将脚本复制到实时服务器上的.git/hooks/post-merge):

    #!/bin/bash
    echo "running git post receive hook..."
    DIR=$(git rev-parse --show-toplevel)
    
    if [ -e "$DIR/composer.json" ]; then
    if [ -d "$DIR/vendor" ]; then
    composer.phar install
    else
    composer.phar update
    fi
    fi
    
    echo "running dev/build"
    sudo -u www-data php $DIR/framework/cli-script.php dev/build flush=1 
    

    它会自动为我运行 composer installcomposer updatedev/build

    另一个提示:不要将您的数据库凭据或开发/测试/实时模式放在您的 git 存储库中。请改用_ss_environment.php。每台机器一个。

    【讨论】:

    • 今年在林茨举行的第一届 Silverstripe 欧洲会议上也有关于 SilverStripe 部署的讨论:anselm.dk/static/talks/silverstripe-europe-meetup-2014/…
    • 非常感谢@wmk。有一些很棒的信息供我阅读。我仍然想知道在实时服务器上没有 ssh/git/composer 的共享主机。 Beam 就像 capistrano 看起来和我一直在使用的一样。我使用composer管理模块的SS,但是因为它们是通过.git目录下载的,所以我不能将它们提交到我的项目仓库,因此我不能使用beam部署到实时服务器,因为它们不是签入。有没有办法将模块添加到我的存储库中,以便我可以部署到实时服务器?这只是为了解决我无法访问作曲家的共享主机。
    • 取决于您的 IDE。使用 PHPStorm,例如(当然也有其他人)您也可以通过 IDE 通过 ftp 进行部署。由于您必须在本地安装整个项目以进行编码,您可以上传所有需要的文件并完成。我将它用于一些非常简单的网站,但我绝对更喜欢 ssh。通过 ftp 部署时,您必须手动运行 dev/build。而且afaik capistrano也可以通过ftp部署,所以它在本地运行composer等,放在服务器上。
    • 是的,我正在考虑小型共享托管站点,我只是通过 FTP 上传,但 Beam 确实支持 ftp 和 ssh。我遇到的问题是,如果我使用 composer 在开发服务器中管理 SS,我无法将 SS 模块签入我自己的项目存储库,因为该模块在目录中有自己的 .git 文件夹。有没有解决的办法?在 GitHub for Mac dropbox.com/s/5m4mcz0n7uplqa9/… 如果我可以将所有内容检查到我自己的存储库中,我可以使用 Beam 通过 FTP 部署共享主机,而不必在实时服务器上运行 composer。破解解决方法
    • Capistrano 支持 ftp 部署。
    【解决方案2】:

    除了 Git,您不需要其他任何东西。他们有这些软件和工具可以让事情变得更容易,但它变得太杂乱、混乱和太多的事情。

    布局: 在开发服务器上安装 git 并启动项目

    在开发服务器上,编辑、添加、删除和提交文件到 repo

    在 prod 上从 git repo 安装 git pull

    当你开发时,git commit 来自 dev 的 repo

    当你想发布时,去实时服务器并发出肠道拉动

    这就是我使用 cvs 和 svn 的方式。它与 git 的想法相同。它就像一个魅力。

    确保你做到ssh over http,这样更好。

    这只是我个人经验的看法;不要逐字逐句。我相信其他人的做法有所不同。

    【讨论】:

    • bitbucket 是一个重要因素。
    • 我不同意:您应该通过 Composer 管理依赖项(包括模块)。不要使用 Git 子模块,将代码签入您的存储库或手动管理依赖项。如果您需要 Beam 之类的东西,则更多的是品味问题——这是可选的,但 Git 和 Composer 是当前的最佳实践
    • 从不使用 git 子模块,与 composer 相比,它们不是一个好的管理解决方案
    猜你喜欢
    • 2013-01-08
    • 1970-01-01
    • 2014-05-04
    • 2014-09-11
    • 2011-01-19
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多