【问题标题】:Looking for SVN Best Practices When Building Rails Applications on Ubuntu [closed]在 Ubuntu 上构建 Rails 应用程序时寻找 SVN 最佳实践 [关闭]
【发布时间】:2008-11-12 17:48:19
【问题描述】:

首先介绍一下背景。

我的整个开发生涯都在 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 应用程序中管理 gems 和插件的最佳实践是什么?我不在乎是否将无数文件添加到 SVN。磁盘空间和网络带宽很便宜。我只是不知道如何正确地做到这一点。

然后转到 SVN。

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

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

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

我实际上是在寻找关于这个的一步一步的过程。

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

【问题讨论】:

    标签: ruby-on-rails ruby svn ubuntu rapidsvn


    【解决方案1】:

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

    对于 gem,希望您使用的是 rails 2 或更高版本。您应该使用config.gemconfig/environment.rb 中列出您需要的宝石。 Here's a bunch of information about that feature

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

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

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

    2. 1234563专门针对您的系统。
      如果您在 ubuntu 上安装了原生 C 扩展,然后将其放在 vendor 文件夹中,然后尝试在 OS X(甚至可能是不同版本的 ubuntu)上运行它,它很可能会使您的 ruby​​ 进程崩溃并带来您的应用程序下来。
      如果您所有的宝石都是纯红宝石,那么这不是问题,只是需要注意。

    【讨论】:

    • 我喜欢这种方法。为什么宝石也不能在供应商文件夹中?我似乎记得在我看到的屏幕投射中看到了那里的导轨宝石。不过我冷是误会了。
    • 更新答案解释:-)
    • 太棒了,感谢您的完整回答。我怎么知道哪些 gem 有原生 C 扩展?我想我只需要查看他们的代码。我同意开发人员必须自己更新 mongrel 和 hpricot(我们同时使用这两个),因为它们不太可能改变我所看到的。
    【解决方案2】:

    许多人使用活塞或沙漠来管理插件并将 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 工具一直都可以在我身上找到,几乎不会导致锁定文件夹问题。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        插件和 svn 是个问题。有一个名为piston 的工具旨在清除它,尽管我不使用它。我将插件检出到我的供应商/插件目录中。如果出现了我真正想要的新版本,我会使用我值得信赖的 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-03-24
          • 1970-01-01
          • 1970-01-01
          • 2010-09-27
          • 2013-07-01
          • 2015-01-25
          • 2017-07-09
          相关资源
          最近更新 更多