【问题标题】:Git / Rails / Shared Hosting (Dreamhost) workflowGit / Rails / 共享主机 (Dreamhost) 工作流程
【发布时间】:2010-11-17 13:57:29
【问题描述】:

这主要是关于有效使用 Git 的问题。首先我应该说我不是 Rails 专家(至少在生产意义上),绝对是 Git 新手,但是,我有一些使用 SVN 的经验。

我的问题是我正在尝试创建一个 rails 应用程序,但不知道在我的计算机上保持本地开发但能够部署到我在 Dreamhost 上的共享主机帐户的最佳方法。

我认为 Git 会允许我这样做,但我不完全确定如何做。我正在考虑在服务器上创建一个 Git 存储库,并在每次提交后将我的本地内容推送到它上面。我已经阅读了一些关于 Git 的教程,但仍然对该怎么做感到困惑。对此的替代方法是仅使用 FTP 并复制文件,但这似乎不正确。

是否有人有一些我可以使用的第一步和/或命令?这种部署方法有问题还是有更好的方法来做到这一点?

【问题讨论】:

    标签: ruby-on-rails git workflow passenger dreamhost


    【解决方案1】:

    我为a brass band in Wisconsin 运行了一个Rails 网站,设置与您所描述的非常相似,尽管它目前在hostingrails.com 之外运行。我托管我的代码on github,尽管你没有理由不能私下托管它。我的流程在过去一年半中有所发展,因此请仅从中获取您在短期内需要的内容。

    在我的流程的中心,我设置了a semi-elaborate Capistrano script 来处理部署,包括a separate staging environment,它会制作生产数据库的完整副本以进行测试。这花费了一段时间(数小时,而不是数天)来构建,但它非常值得。

    我的工作流程保持at least 2 branches

    • current_release: 现场生产代码。此处进行了紧急错误修复。
    • master: 已完成的功能准备发布。这些功能在这里等待现场测试。紧急错误修复从current_release 合并。
    • <feature_name>: 功能正在开发中。在任何给定时间,我都尽量不超过 3 个。合并了紧急错误修正,并经常合并master 以保持功能最新。

    有了这个设置,我可以同时处理几件事情。每周(因为这远非全职工作),我会做以下事情:

    1. 我在功能分支中进行编辑。我来回切换,感到无聊,兴奋,等等。有时我会合并两个共同增长的功能。

      [edit]
      $ git commit
      $ git push github [feature]

    2. 准备好部署的已完成功能将一次一个地合并到master 分支。

      $ git checkout master
      $ git merge [feature]
      [fix immediate problems or inconsistencies]
      $ git commit
      $ git push github master
      $ git branch -d [feature]

    3. 我将网站暂存到一个私有 URL(恰好是 stage.madisonbrass.com)。 staging 环境总是从master 分支拉取。

      $ cap staging deploy # master is now live at stage.madisonbrass.com

    4. Bam,在我进行测试时,我在公共网站上发现了一个紧急错误。幸运的是,我有 current_release 单独工作,因此可以单独修复和部署它。

      $ git checkout current_release
      [fix bug]
      $ git commit
      $ git push github current_release
      $ cap production deploy

    5. 我返回master 分支,并从合并紧急修复开始。

      $ git checkout master
      $ git merge current_release

    6. 我继续测试master。希望不会出现新问题,但如果出现问题,我会在 master 中修复它们,我会将这些更改合并到 current_release 并进行另一个生产部署。

      $ git checkout current_release
      $ git merge master
      $ git push github current_release
      $ cap production deploy

    7. 我拆除了我的暂存环境,以免它以某种方式被搜索引擎索引。

      $ git staging teardown

    【讨论】:

      【解决方案2】:

      我所做的是拥有一个共享的裸 Git 存储库(使用 git init --shared --bare 创建),它是“主”存储库,是我推送工作的地方。裸存储库没有工作目录。对于我的 web 目录,我克隆了主存储库,因此它有一个工作目录并且所有文件都在那里。从那里,我git pull我已经提交的任何新工作。

      我总是在具有存储库克隆和测试开发环境的单独机器上进行开发工作。当我完成一个功能后,我将它推送到主服务器,然后登录到生产服务器并将其拉到那里的工作目录。

      这只是我对于不太重要的项目。可以通过更多步骤以及重要工作的检查和平衡来扩展这一点。

      【讨论】:

      • 我考虑过用 GitHub 来做这件事,因为这也是一个个人项目。但是,我不知道 --shared 和 --bare 选项,这在这种情况下似乎很有帮助。
      • 对,一个 Github 仓库相当于 --shared --bare。对于我推送到 Github 的项目,我在我常用的工作目录中设置了两个远程存储库,一个称为“origin”用于我自己的主存储库,一个称为“github”用于推送到 github。然后,我可以随时使用一个命令(git push(默认为原点)或git push github)推送到其中一个或两个。
      【解决方案3】:

      我建议使用 GitHub 并尽可能免费地使用 Dreamhost 资源来运行 Rails 应用程序(事实上,取决于你的项目,我需要尽可能多的资源来处理它,作为一个共享主机)。

      我通常的工作流程包括拥有一个开发环境和一个 GitHub 帐户。我们使用 Capistrano(学习和理解起来相当简单)来管理对 GitHub 的推送,然后通过 SSH/SCP 对主机(在您的情况下为 Dreamhost)进行相应的部署。

      这样,您就不必担心生产存储库中的实际内容,也不必对其执行维护任务。工作速度也很快,当您决定更改主机或服务器时可以轻松适应。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-02
        • 2012-09-28
        • 1970-01-01
        • 2011-02-28
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多