理解JRuby,Rails,Gem,Rake和Bundler之间的联系

时间:2015-08-20 20:06:12

标签: ruby-on-rails gem rake jruby

所以我工作的人不久前在JRuby创建了一个Web应用程序,我的任务是......

  1. 了解代码
  2. 在本地运行JRuby Web应用程序
  3. 确定是修复它还是重写它,添加功能等。
  4. 我对JRuby完全不熟悉,并且有点挣扎于基础知识。我正在盯着我提取的代码,其中包含 app,bin,config,lib,script,test等文件夹,还包含 Gemfile,Gemfile.lock,Rakefile,等等。我不知道如何在本地运行这个东西...

    据我所知,到目前为止,这里有一些相互作用的系统。它们是: JRuby,Ruby,Java,Rails,Gem,Rake和Bundler 。我正在努力的是他们如何一起工作。

    JRuby - 我的理解是,使用JRuby,您使用Ruby编程语言进行开发,并且它使用Java虚拟机,因为它具有我不知道的任何好处。

    Ruby - Ruby有一个专门用于构建Web应用程序的框架,称为Rails,它利用MVC框架轻松创建Web应用程序。 JRuby可以直接使用Ruby或Rails。

    Rake - 我不太清楚Rake是什么。我认为这基本上是Make。你在Rakefile上调用rake,它可以执行你指定的任何任务。

    宝石 - 我认为宝石是一种打包Ruby Web应用程序的方式(rake和bundler是宝石?)。我对这一点感到非常困惑。我认为gem是一个打包Ruby Web应用程序的命令行工具,此时你将它称为“gem”。

    Bundler - 在这一点上非常失败。我想你定义了一个Gemfile(不确定如何使用Gemfile.lock),并使用bundler将这个Gemfile中的所有gem捆绑在一起。然后你可以在你的应用程序中包含所有这些“require'bundler / setup'”...虽然我认为你必须在应用程序中再次要求你在Gemfile中定义的任何宝石吗?

1 个答案:

答案 0 :(得分:4)

JRuby - MRI Ruby(或C Ruby)是Ruby语言的原始实现。 MRI Ruby是用C语言编写的.JRuby是在Java虚拟机之上实现的Ruby,其中很多都是用Java编写的。我对JRuby和MRI Ruby之间的许多细节都很模糊,但是根据我使用JRuby学到的知识,我知道了这些:

  • JRuby更快,因为它是多线程的。这意味着它可以一次管理多个请求。 MRI不是多线程的。因此,您将在JRuby和Ruby之间看到很多基准测试,并且您会发现JRuby在速度方面优于Ruby。
  • JRuby并没有那么好的宝石支持。这意味着你会错过很多宝石。
  • JRuby最近才与JRuby 9.0.0.0版本的Ruby 2.2兼容。但是,使用最新版本的Rails还有很多问题需要解决,所以我会做很多研究来确保JRuby 9.0.0.0和Rails之间没有重大问题4.2 +。
耙子 - 你基本上是这样的。

宝石 - 它们基本上是可以集成到项目中并运行的代码包。这可能是Ruby的最大特色。假设您要使用RSpec测试框架。如果将其包含在项目的Gemfile中,它将非常容易运行。

Bundler - Gemfiles是Bundler独有的。我喜欢将Bundler视为宝石的依赖管理器。您可以指定每个gem在Gemfile中运行的版本,当您运行bundle安装时,Bunder将为您提取并安装每个gem的特定版本。每个捆绑包安装或捆绑包更新都将更新您的Gemfile.lock,其中列出了您的项目的宝石被锁定的版本"至。 Gemfiles是Bundler独有的,所以你也可以看到像.gemspecs这样的东西在你可能正在使用的其他Rails引擎或Rails应用程序中漂浮。