1

首先介绍一下背景。

在我的整个开发生涯中,我一直在 MS 平台上工作。直到两周前,我从未启动过除 98/XP/Vista 之外的任何其他操作系统。我很久以前就开始使用 VSS,大约 2 年前更改为 SVN。对于 SVN,我使用 TortiseSVN 并使用标准的分支/标签/主干设置。

我的项目也是独立的,这意味着我可以去一个新的开发框,拉下一个存储库,打开 VS,按 F5,它就会运行(大部分时间)。所有依赖项都存储在一个lib文件夹中,源代码在一个src文件夹中,等等......

为了学习新事物,我决定构建一个 Ruby on Rails 应用程序并创建了一个基于 Ubuntu 的开发机器。我已经启动并运行了一个 SVN 服务器,并且正在与另一个人一起在这个项目上工作。他碰巧使用 Mac 作为他的开发机器。

现在是问题。

我似乎在为如何管理各种版本的 ruby​​、rails 和我正在使用的所有插件而苦苦挣扎。我似乎也在努力在 Ubuntu 上使用 SVN。

所以 Ubuntu 预装了 Ruby。我想说它是 1.8.5 版本。无论哪种方式,我都为我正在使用的插件(社区引擎)安装了一堆宝石。作为 *nix 的新手,我在安装它们时没有使用sudo它们并遇到了各种问题。我最终彻底摆脱了 Ruby 并重新开始。这似乎奏效了。

但问题是,在我提交我的代码之后,另一个人得到最新的,他必须经历安装 gems 的整个过程。

在 RoR 应用程序中管理 gem 和插件的最佳实践是什么?我不在乎是否将无数文件添加到 SVN。磁盘空间和网络带宽很便宜。我只是不知道如何正确地做到这一点。

等到SVN。

我已经安装了 RapidSVN,但经常遇到文件夹被锁定的问题。有几次我意识到我的错误,其他人,我不知道为什么。但在这两种情况下,我都无法修复它。我最终备份了我的代码,下载了一个新的工作副本,然后手动移动更改并在将它们提交到项目时变得更聪明一些。

昨晚我实际上有点 RTFM,发现我应该为我的 repos 创建一个书签,然后从那个书签做一个“结帐工作副本”。我不知道为什么,但是好的,这就是手册所说的......

在 Ubuntu 上的 RoR 项目中使用 SVN 有哪些最佳实践?

我真的在寻找这个的一步一步的过程。

编辑 我忘了提及,我将 NetBeans 用于我的 IDE,虽然我还没有查看它有什么样的 SVN 支持(如果有的话)。我查看了 RubyMine,很想使用它,但它现在似乎太不稳定了。

4

4 回答 4

4

对于插件,我个人建议将它们粘贴在 vendor 文件夹中并将它们添加到 SVN,就好像您自己编写代码一样。Piston 也是一个很好的解决方案,但是当所有常用插件都开始迁移到 github 时,就放弃了它(从那时起,piston 一直不可靠)

对于 gems,希望您使用的是 rails 2 或更高版本。您应该在config/environment.rbusing中列出您需要的宝石config.gem这是有关该功能的大量信息

这意味着如果您添加一个新的 gem,下次您的同事更新时,他的 rails 应用程序将无法启动,直到他获得必要的 gem。然后他可以使用一步安装它们sudo rake gems:install

您可以更进一步,将您的 gem 放在 vendor 目录中。这通常被称为“供应商一切”。最简单的方法是列出你在environment.rb上面使用的所有 gem,然后运行rake gems:unpack​​. 然而,这种方法有两个问题,所以我不想自己使用它。

  1. 如果您有 10 个应用程序并且每个应用程序都提供了他们的 gem,那么您最终会在 subversion 中保留 10 个通用 gem 的副本,这使得更新所有站点的速度要慢得多。
    这对您来说可能不是问题,或者可能值得忍受,这只是个人喜好。

  2. 一些 gem(例如 mongrel 或 hpricot)具有用 C 编写的本机扩展。这意味着当您安装它们时,.c会下载源代码,并gcc运行以专门为您的系统编译它。
    如果您在 ubuntu 上安装了原生 C 扩展,然后将其放在 vendor 文件夹中,然后尝试在 OS X(甚至可能是不同版本的 ubuntu)上运行它,它很可能会使您的 ruby​​ 进程崩溃并带来您的应用程序向下。
    如果您所有的宝石都是纯红宝石,那么这不是问题,但这只是需要注意的事情。

于 2008-11-12T20:24:16.333 回答
1

许多人使用活塞或沙漠来管理插件并将 gem 安装到 Rail 本地供应商文件夹(存储在 SVN 下)。

http://www.rubyinside.com/advent2006/12-piston.html http://pivotallabs.com/users/brian/blog/articles/459-build-your-own-rails-plugin-platform-with-desert

我还建议使用 geminstaller,它可以帮助您安装所有相同的 gem 和它们的相同版本

http://geminstaller.rubyforge.org/

我从命令行使用 SVN,但如果您对 TortiseSVN 更熟悉,您可能想尝试 SVN 很好集成的 IDE,如 RadRails 和 NetBeans。IDE 具有非常相似的图形 SVN 管理器,类似于 Tortise,如果你想在 cmd 行上工作,只需找到一个简单的 10 分钟 SVN 教程,你应该很高兴。

我从来没有听说过快速 SVN,普通的 SVN 工具一直都可以在我身上找到,几乎不会导致锁定文件夹问题。

于 2008-11-12T18:08:28.463 回答
0

Orion 提到在不同操作系统之间共享它们时必须重建已售出的 gem - 您可以使用 gems:build rake 任务自动重建它们。

于 2008-11-13T10:32:21.397 回答
0

首先,从命令行找出 svn。svn-book上线了。执行 svn status 或 svn commit -m "blah" 并不难。如果您使用操作系统功能删除或重命名文件,大多数问题都会出现。为此使用 svn 命令。

接下来,如果 rapidsvn 不适合您,请尝试 svn-workbench。讨厌这么说,但是我见过的 linux svn GUI 工具没有一个像 tortoisesvn 一样好。

插件和 svn 是个问题。有一种叫做活塞的工具旨在清除它,尽管我不使用它。我将插件检出到我的供应商/插件目录中。如果出现了我真正想要的新版本,我会使用我值得信赖的 update_plugin bash 脚本来更新插件:

#!/bin/bash

#  reinstall the plugin in an svn friendly way
plugin="some_plugin"
plugin_url="http://some_server/some_plugin/trunk"

for f in site1 site2 site3
do
  echo $f
  cd ~/rails/$f

  svn delete vendor/plugins/$plugin
  rm -rf vendor/plugins/$plugin
  svn -m "remove $plugin" commit
  script/plugin install $plugin_url
  svn add vendor/plugins/$plugin
  svn -m "add $plugin" commit

done
于 2008-11-17T18:53:25.650 回答