突出Sinatra结构

时间:2014-07-08 11:28:35

标签: ruby rubygems sinatra bundler

我实际上构建了一个Sinatra应用程序,我想在Ruby / bundler等中明确一点...

关于要求rubygems config.ru的问题是什么?很多人这样做,但为什么呢?

要求bundler/setup进入app.rb同样的问题?有些人说它需要我们拥有的每一颗宝石Gemfile,但这是真的吗? (在这种情况下,我们不需要sinatraactive_record ...)。

最后我不太了解的是要求。第一个入口点是config.ru。因此,如果我们需要rubygems然后./app.rb,我们就不需要rubygems进入./app.rb,对吧?

1 个答案:

答案 0 :(得分:2)

  

关于在config.ru上要求rubygems的内容是什么?很多人这样做,但为什么呢?

从Ruby v1.9起,无论如何都是默认需要它并不重要。我检查了一个我正在进行的项目,并且我已经把它放在了顶部,所以它没有任何理由!也许我现在就摆脱它......

有关详情,请参阅http://www.rubyinside.com/why-using-require-rubygems-is-wrong-1478.html

  

要求捆绑/设置到app.rb的同样问题?有些人说它需要我们在Gemfile中拥有的每一颗宝石,但这是真的吗? (在这种情况下,我们不需要sinatra,active_record ......)。

是的,Bundler will handle require for you if you tell it to,但实际上我使用this style

require 'rubygems'
require 'bundler'
Bundler.setup(:default, :ci)
require 'nokogiri'

因为我喜欢处理我自己的require,所以它(通常)会更快,更特别地进行测试,IMO。

另请注意,来自链接的文档:

  

对于另一种应用程序(例如Sinatra应用程序),在尝试需要任何宝石之前,您需要设置bundler。

最后,

  

第一个入口点是config.ru。因此,如果我们需要rubygems然后使用./app.rb,我们就不需要将rubygems放入./app.rb,对吧?

是的,require will only load a library once

  

加载给定名称,如果成功则返回true,如果已加载该功能则返回false。