无法理解RVM,Gems和一般Ruby on Rails环境设置

时间:2012-01-15 07:20:13

标签: ruby-on-rails

我已经在这个问题上阅读了一些Q& A,但我仍然感到困惑。我是linux的新手,也是编程的新手,所以请记住这一点。

我知道Ruby Gems与apt-get类似。它是一个包管理器 - 对吗?

因此,如果我想安装或移除宝石,我可以通过以下命令来执行:sudo gems install {gem name}

那么RVM是什么?我为什么要使用它? Ruby Gems不做RVM的工作吗?那么为什么Ruby Gems会安装RVM?

此外,在项目的Gemfile中指定gems,然后使用bundler进行更新等等,这只是将gems下载到该项目,还是现在可以在所有项目中使用?

另外,$ PATH是什么?我不太了解它,所以当我读到它时,我对什么是正确的$ PATH感到困惑,如果有什么我应该做什么来管理$ PATH中的引用等等。有人可以解释一下或指向初学者的任何资源?

最后,我使用了各种教程,它们在从Ruby到Rails到Gems的所有版本上都有所不同。 a)我应该修改我的环境以匹配他们使用的版本吗? b)一旦我完成了一个教程,我应该单独保留所有版本,还是应该尝试将所有版本升级到最新版本?

令人困惑,因为如果我在教程中保留版本级别的所有内容,那么我觉得我已经陷入了困境。如果我升级到最新和最好的,我觉得事情已经转移到我身上,我不知道如何使用我学到的所有技巧和窍门。

提前感谢您抽出宝贵时间提供帮助。欢呼声。

2 个答案:

答案 0 :(得分:2)

这个问题非常广泛,所以我选择尝试平衡显性和简洁。如果有人发现答案有任何问题请告诉我,我会直接了解答案:)

RVM是一个Ruby版本管理器。假设有些项目可能要求你运行ruby 1.9,另一个遗留项目可能需要1.8。 RVM允许您并排安装这两个安装,而不是拥有一个权威的系统级版本的ruby。这有助于安装更高版本的ruby而不用担心破坏任何东西,或者干涉其他用户帐户的ruby版本要求(因为通常一个在用户级别安装RVM,在您的主目录中)。这甚至可以让你尝试最新版的红宝石,而无需担心,因为你可以随时轻松切换回来。

当您安装gem时,通常可以随时随地使用ruby安装,因此在任何项目中都可以使用。当你在你的Gemfile中指定gems时,你基本上就是说,无论你安装的是什么宝石及其版本,那个项目需要版本2.2的gem x,版本3.1的y和版本的z 1.1。如果您没有安装这些宝石,如果您安装了这些宝石,则安装它们。

Pathenvironment variable,允许操作系统在调用程序时知道在哪里查找程序。如果您在终端中输入 someapp ,操作系统如何知道 someapp 的位置?好吧,它会在$ PATH中提供的任何目录中搜索它。您可以通过在shell中执行echo $PATH来查看路径中的内容。

至于不同版本的ruby,这让我回到了RVM的原因。如果你想安装他们使用的ruby版本,你可以在Gemfile中明确说明教程使用的gem版本,你应该没问题。您可以安装不同版本的gem,并且可以使用RVM安装不同版本的ruby。

就我个人而言,我建议您努力使用最新版本的所有内容,以便保持相关性。例如,在使用Rails 2的教程上工作会适得其反,因为它在3到3时会发生很大变化,有些从3到3.1及以上等。如果可能的话,使用最新版本,或者至少要注意细微差别(基础材料往往或多或少保持相同),以免你在一个较旧的教程上工作,只使用最新版本的所有东西来开发你自己的项目,而不是让它工作。

解决您的困境的简单方法:抛弃太旧的教程。有大量的资源,你必须找到最新的材料。最糟糕的情况,过时的材料通常以评论的形式提供社区支持,其中陈述了某些日期版本与其相应的最新版本之间的变化。例如。 “请记住,哈哈。在版本3.1中改变了lol.wut”

答案 1 :(得分:0)

我可以理解这是令人困惑的,RubyGems就像你编写一个包管理器一样。 RVM是一个工具,可以在您的系统上安装多个版本的ruby,并且它们之间可以轻松快速地进行。

如果您使用各种教程,并且它们在从Ruby到Rails到Gems的所有版本上都有所不同,您可以(如果您愿意)为您使用的版本创建RVM Gemset。然后,您将为项目中的Gems Bundler创建一个沙箱。

Bundler就像你编写一个工具来管理你的应用程序所依赖的Gems。在Bundler之前的日子里,弄清楚你的应用程序所依赖的宝石可能会很麻烦。现在Bundler为你做这个。

Bundler和RVM都是绝对不必使用的工具,但它们会对您有所帮助。我个人不再使用RVM了。根据我的口味,这是一个怪物,所以我使用rbenv代替。

关于使用哪种版本的Rails我同意你应该尝试使用3.1版本,但如果你找到一些使用Rails 3.0的示例应用程序,你不需要升级它。此外,您不需要运行绝对最新版本的Rails。 Rails 3.1有很多错误修复,最新的Rails 3.1.3可能没有。