Git / Rails /共享主机(Dreamhost)工作流程

时间:2009-08-07 03:19:41

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

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

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

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

是否有人有一些我可以使用的第一步和/或命令?这种部署方法是否可疑还是有更好的方法吗?

3 个答案:

答案 0 :(得分:8)

我为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. 我将网站上传到私人网址(恰好是stage.madisonbrass.com)。 staging 环境始终来自master分支。

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

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

    current_release

  5. 我返回 $ git checkout current_release
    [fix bug]
    $ git commit
    $ git push github current_release
    $ cap production deploy
    分支,首先合并紧急修复程序。

    master

  6. 我继续测试 $ git checkout master
    $ git merge current_release
    。希望不会出现新问题,但如果他们这样做我将其修复为master,我将这些更改合并到master并进行另一个生产部署。

    current_release

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

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:0)

我建议使用GitHub并保持你的Dreamhost资源尽可能免费运行你的Rails应用程序(事实上,根据你的项目,我需要尽可能多的政变与它,是一个共享主机)。

我通常的工作流程涉及拥有开发环境和GitHub帐户。我们使用Capistrano(这是相当简单的学习和理解)来管理对GitHub的推送,然后通过SSH / SCP管理对你主机Dreamhost的托管的相应部署。

这样,您就不必担心它在生产存储库中的实际情况,也不必担心它的维护任务。工作得非常快,并且可以在您决定更改主机服务器时轻松进行调整。