4

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

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

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

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

4

3 回答 3

8

我为威斯康星州的一个铜管乐队运行了一个 Rails 网站,其设置与您所描述的非常相似,尽管它目前在 hostingrails.com 之外运行。我在 github 上托管我的代码,尽管你没有理由不能私下托管它。在过去的一年半里,我的流程已经发生了变化,因此请仅从中获取您在短期内需要的内容。

在我的流程的中心,我设置了一个半精巧的 Capistrano 脚本来处理部署,包括一个单独的登台环境,它制作了生产数据库的完整副本以进行测试。这需要一段时间(几个小时,而不是几天)来构建,但它非常值得。

我的工作流程至少保留2 个分支:

  • 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)。登台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

于 2010-06-28T23:06:26.667 回答
4

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

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

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

于 2009-08-07T03:25:17.423 回答
0

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

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

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

于 2009-08-07T03:57:56.267 回答