细说Ruby工程的Bundle以及怎么加快bundle install

细说Ruby工程的Bundle以及怎么加快bundle install,第1张

细说Ruby工程的Bundle以及如何加快bundle install

  做过Ruby项目的人可能有过我一样的感受,rubygemsorg在中国的访问太慢了,每次我们bundle install都要等老长时间,而我们通过浏览器去下载对应的gems文件时却速度刷刷的。。。 为什么会出现这样的情况呢? 明明我们在Gemfile中写的是:

  

source ""

  好了,既然bundle install很慢,那我就去下载gem文件下来到本地,然后运行:

  

gem install /path/to/gems/gem

  结果发现,有些gem文件安装速度很快,有些bundle安装很慢。 为啥呢? 我们又如何去避免这样的痛苦呢?

  好,那下面我就先来详细说明一下ruby的bundle机制。

  首先说一下Gemfile文件,Gemfile就是用来描述你当前ruby工程需要依赖的插件bundle,好比在java的插件工程,当前工程会依赖哪些其他插件,依赖的插件有版本区别。比如下面就是我的一个简单ruby工程的Gemfile文件内容:

  

source ""

gem "rspec", "~> 270"

gem "rake", "~> 0922"

  第一行说明我bundle下载的服务器

  第3行和第4行说明我当前工程需要依赖rspec插件和rake插件

  "~> 270"表示需要对于的版本好为 >= 270 而且 <= 280

  在运行调用代码之前都需要先bundle install好对于的插件bundle

  但是写了Gemfile就需要安装bundler插件,这个完全可以通过下面的命令来完成

  gem install /path/to/gem/bundler-versiongem

  (先下载bundler gem文件到local)

  好了,安装好了bundler,就可以执行bundle install了。

  但是每次都执行bundle install都很慢很慢,让我无法承受。怎么办?

  下载到本地然后gem install,发现如果插件有依赖的话,还是同样很慢,因为它会自动访问服务器去下载需要依赖的插件。既然我本地可以通过浏览器直接下载下来我需要的bundle,能否直接利用到本地的? 答案是可以的。

  我们完全可以搭建一个本地的gem mirror服务器,而且非常简单。

  首先,下载好所有的gem文件(其实就是bundle文件),注意依赖插件也必须准备好,放在本地某个目录中。 然后在这个目录中执行下面命令:

  

gem generate_index -d /path/to/your/gemfiles/

cd /path/to/your/gemfiles/

gem server

  然后修改你的Gemfile的source,改成如下:

  source ""

  然后运行bundle install,看到的结果一定是让你激动的效果~

  最后,建议每个ruby工程目录中增加一个rvmrc文件,这个文件就是用来指定你该工程使用的ruby版本,已经bundle安装目录和cache目录。rvmrc的内容只有一句话:

  

rvm --create use ruby-192@myprojectname

  然后你每次进到工程目录种后都会看到自动切换到相应版本的ruby提示信息。

  注意,第一次设置后,需要重新安装bundler以及bundle install,原因可以自己想一下。

  另外,每次修改Gemfile时,都需要bundle install一下,这个时候不会安装所有的bundle,因为上次bundle install的时候会生成一个Gemfilelock文件,告诉bundler哪些bundle已经安装了,而且依赖关系也知道了。 这次只会安装新增的bundle

  链接:

  1 Creating a RubyGems Mirror With HTTP Basic Authentication

  2 Creating your own RubyGem mirror

  3 Bundler说明

用 2015版本试试看

1载完压缩包进行解压启安装程序

2进入安装界面第页点击Next

3接受协议勾点击Next

4选择软件安装路径安装路径要现文容易现莫名其妙错误安装程概需要12钟

5完现框选择项目存放路径要现文面选项意思问启候要要再提示

6使用注册机前关闭MyEclipse且注册机与该软件放起启注册机Usercode随意输入旁边拉框选择BLVE点击Systemld获取机器码点击Active

7信息框现License Key、Activation Code、Activation Key等信息

8点击Tools选择ReplaceJarFile现框选择MyEclipse安装目录plugins目录默认:C:\Users\Administrator\AppData\Local\MyEclipse 2015\plugins替换掉原数据

myeclipse 2015:

rvm nginx passenger rails配置服务器安装passenger1gem install passenger安装ngnix1passenger-install-nginx-module已经安装好nginx 和 passenger ,默认配置和命令1#配置2/opt/nginx/conf/nginxconf3命令4/opt/nginx/sbin/nginx修改默认文件1http {2 passenger_root /Library/Ruby/Gems/18/gems/passenger-405;3 passenger_ruby /System/Library/Frameworks/Rubyframework/Versions/18/usr/bin/ruby;4 rack_env gabriellocal;准备rails项目 ,查看 Phusion配置server ,配置模板1server {2 listen 80;3 passenger_ruby /Users/soft/rvm/wrappers/ruby-193-p429@rails3/ruby;4 server_name localhost;5 root /Users/soft/Sites/rails-unity/public; # <--- be sure to point to 'public'!6 passenger_enabled on;7}需要配置以下passenger_ruby 使用正确的ruby 版本server_name 拥有的域名listen 监听的端口root rails 程序的public 目录后几项没问题,第一项通过以下得到1#切换到正确的rails版本2rvm use 193@rails33#安装passenger , 否则没有下面这个命令4gem install passenger5passenger-config --ruby-command6#在输出结果中找出 passenger_ruby ,重启nginx , 完成

因为在redis/src中有一个文件叫做redis-tribrb,这个文件就是作者用Ruby写的,用来搭建redis集群(redis30版本时才开始支持集群),redis-tribrb的后缀就是Ruby的简写,所以想要搭建redis集群需要有一个能执行rb这种文件的运行环境,这个环境就是Ruby。

Ruby 是另外一种开源的,面向对象的,通用的编程语言,这是一种简单的,有助于应用开发的语言。

  Ruby有名的框架是 Rails(Ruby on Rails),这主要被用来 web 开发。

 它在服务器端开发是很有用的,有很多公司都使用它,如:Bloomberg, Airbnb, Shopify, Hulu 和 Slideshare 等等,且被用在一个或多个项目之中。

  Ruby 常常被用来与 Python 的可读性进行比较,它提供类英语的语法,这让 Ruby 成为一个的候选者,适合作为个编程语言来学习。

先定义一下前后端,所谓web前端是指运行在用户浏览器中的内容;而后端则是指运行在应用服务器上的内容。前后端之间通过http协议进行交互:浏览器发起http请求(来源于浏览器的直接发起和前端代码中的ajax请求),后端得到请求后返回数据(可能是html、静态文件或者ajax调用产生的数据)。

ruby只能做服务端也就是后端开发,前端依然需要使用javascript+css

不过javascript也可以用作后端开发,那就是nodejs

  Phusion Passenger是一个流行的Web应用服务器,它最初是针对Ruby的,现在也支持Nodejs应用。在今年的早些时候该功能被引入了Passenger的企业版中,但是现在已经开源并随着最近的4021免费版发布。

  Passenger能与Apache或者Nginx Web服务器集成,旨在成为一个服务、监控和扩展Web应用程序的完整解决方案。Phusion公司的 总部位于荷兰 ,他们宣称在Passenger中运行 Nodejs 应用的好处包括:

  多租户——通过最小的配置运行一些应用的能力

  监控——自动启动Nodejs进程、如果进程崩溃了则重启它们

  扩展——根据要处理的请求的数量增加或者减少进程的数量

  统计——帮助显示运行中进程的状态的工具

  Passenger的作者 还指出 ,与Apache/Nginx集成还带来了其他的好处,例如:加速了静态文件服务,阻止了很多常见的攻击和慢客户端。

  该公告标志着Phusion向自己宣称的让Passenger最终成为一个多语言应用服务器的目标更进了一步。去年,Passenger对 Python的支持到达了beta状态 ,并于最近完成。紧跟着发布了支持Nodejs的公告,Phusion还 推出 了 Meteor (一个基于Node的应用框架)支持。

  Passenger本身是用C++编写的,它没有和Ruby或者任何其他的语言紧耦合。版本4中的一些架构发生了一些变化。Passenger内部的I/O处理器现在是事件驱动的,和Nodejs的工作原理相似,同时企业版支持混合多进程和多线程执行,这是为了在支持通过WebSockets进行流媒体直播这样的功能时最大化资源利用率。

  Passenger还为Ruby应用提供了“带外(out of band)”执行这样的功能,用户能够利用它们做其他的事情,例如:将垃圾收集延迟到请求期间,与Phusion的 Union Station产品 (一个订阅式应用监控和分析服务)集成。

  在流行的Ruby应用服务器中,Puma和Passenger相似,它们都喜欢使用线程而不是Thin和Unicom这样的服务器所使用的事件架构。Phusion团队最近发布了 一篇文章比较了Passenger和Puma ,而Puma的作者Evan Phoenix则在HackerNews上对此 做出了回应 。

  InfoQ和Phusion的CTO Hongli Lai进行了一次谈话以讨论Passenger最近的更新:

  Passenger 为 Ruby 用户提供了不寻常的特性,例如带外执行,它和语言运行时紧密集成。那么对于 Nodejs 和 Python 用户而言有相似的功能么?

  大部分功能所有支持的语言都可以使用,包括Nodejs和Python。从第一天开始,我们就一直在尽量减少对Ruby的依赖。虽然我们并没有积极的推广,但是事实是在第一个版本发布几个月之后我们就已经支持Python。 我们现在还计划在下一次发布时支持 Meteor 。

  Nodejs和Python不能使用的功能只有很少几个,或者是因为它们对这些语言没有意义,或者是因为它们需要简单的语言特定的支持代码,而这些代码还没有被编写。Node和Python的垃圾收集器通常并不会忍受像Ruby那样的长时间的GC暂停,所以我们期望Nodejs和Python用户不需要带外工作。

  你认为现在的 Nodejs 支持有多稳定?

  我们认为它非常稳定。所有的应用程序测试都通过了,所有测试人员的应用程序都工作良好且没有已知的问题。

  Passenger 最初的目标是让 Ruby 部署和 PHP 部署一样简单,仅需要用户将他们的应用丢放到正确的目录即可。你认为 Passenger 现在已经完成这一目标了么?

  部署一个应用涉及到很多事情,从操作系统和语言运行时的配置到类库依赖的管理和应用程序进程的监控。PHP的部署之所以容易的原因之一是,Web服务器能够通过mod_php模块自动地处理运行的PHP应用程序。

在最初开发Passenger的时候,我们的主要计划是运行、监控和管理Ruby应用程序。你必须运行多个应用程序服务器进程,让它们监听一个本地socket,设置Web服务器反向代理这簇sockets,并且设置进程监控工具重启崩溃的进程。而在Passenger中,我们开发了一个类似于mod_php的机制解决了这些问题。因此在版本10中我们已经实现了自己的目标:通过将一个Ruby应用程序丢放到正确的目录运行它。

PHP生态系统依然被认为更容易部署的原因是,许多流行的PHP应用程序能自动地处理除了应用程序运行之外的其他事情。例如, Wordpress 没有依赖,不需要用户编辑配置文件或者通过漂亮的图形用户界面征求数据库凭证。但是如果你编写自己的PHP应用,那么你将会遇到和Ruby、Node或者Python应用开发人员相同的问题。

  有没有托管公司真正地提供开箱即用的 Passenger 支持?

  提供开箱即用的Passenger支持的知名托管公司有 Amazon Elastic Beanstalk 和Red Hat OpenShift 。许多其他的提供商(例如 Heroku )对应用程序服务器的选择往往不可知,但是它们依然允许用户很容易地使用Passenger。还有很多较小的托管公司默认使用Passenger,例如 BrightBox 和 SpeedyRails 。

  在 Ruby 应用程序服务器领域有一些强有力的竞争者( Thin 、 Unicorn 和 Puma )。那么你认为目前 Passenger 在这个生态系统中处于什么位置?

  其他的Ruby应用程序服务器比Passenger有更多的范围限制。它们需要用户启动一个或者多个进程,将它们设置为监听sockets,配置反向代理规则等。对于想要严格控制整个系统的专家而言这并不一定是错误的方法,但是却不同于我们的哲学。我们希望软件易于安装、使用和管理,同时依然可以保持稳定性和灵活性。

但是话说回来,我们都互相学习了很多内容。例如,Passenger的“智能产卵(smart spawning)”功能在日期上要早于Unicorn,但是Passenger的带外工作功能借鉴了Unicorn的,尽管我们对该功能做了改进。每一种服务器都有它自己的优势和劣势。

转载

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 细说Ruby工程的Bundle以及怎么加快bundle install

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情