Gemfile在rails中的用途是什么?
Gemfile
在rails中的用途是什么?
如何使用Gemfile
?
在你开发Rails的过程中,有时候你会想要提供一些你需要的function,但是你不知道该怎么做,或者你不想自己去实现它,因为很多有才华的开发人员已经将其工作发展到了一个新的阶段。
您可能需要的这些开发(用户身份validation,消息系统,资产处理程序,地理定位,分页系统,与外部服务(如Amazon AWS)的连接,以及最后但并非最不重要的Rails本身)称为Ruby Gems。 这些是Ruby的软件包,不一定与Rails有关,但是由于Rails是基于Ruby的,因此可以将98%的gem应用到你的Rails webapp代码中。
许多gem可以在github中find,但它的function通过ruby或ruby工具箱searchgem
您的gemfile
是您想要包含在项目中的所有gem的列表。 它与bundler (也是一个gem)一起使用来安装,更新,删除和以其他方式pipe理您使用过的gem。
gemfile
有另外一个目的 – 你可以将gem分为:development
, :test
, :assets
, :production
等组,并且Rails会知道何时包含这些gem。 例如:
group :development, :test do gem "rspec-rails" gem "factory_girl_rails" gem "guard-rspec" end
请注意,在Rails 4上, assets
组已被弃用
这些gem属于开发环境和testing环境,因为它们用于testing应用程序。 你不需要在生产环境中使用它们(你可以,但是这会不必要地膨胀内存)。
所以 – 要使用gemfile
,只需编写你想安装的gem,比如
gem 'devise'
请确保事先安装bundler
(在您的console / cmd / ssh中)
$ gem install bundler
然后在控制台中写入
bundle install
你会注意到另一个gemfile出现! Gemfile.lock
这个文件,你会看到,如果你用文本阅读器打开它,用你的版本和它们的依赖关系列出你所有的gem。 当你需要知道你安装了哪些版本的gem时,这会很有用。
有关Gemfile
更多信息,请阅读捆绑器页面
有关selectgem的信息,你可以从这开始
祝好运并玩得开心点!
好的,这是什么Gemfile.lock创build?
Gemfile.lock,顾名思义是locking所有安装的gem版本。 因此,如果Gemfile是需要安装的,那么locking文件就是安装的,实际需要哪些版本来启动和运行应用程序。
如果你没有特定版本的Gem(如Gemfile.lock中指定的),rails会发出抱怨,你将不得不安装缺less的gem(通过bundle install
)或手动修复任何冲突(我相信bundler会给你一些线索)
有关Gemfile.lock
一些Gemfile.lock
- 如果您意外删除它,则在运行
bundle install
时将会重新生成。 如果你不小心删除了Gemfile
,那你运气不好。你应该用git 🙂 - Heroku不关心Gemfile.lock,因为它会重新安装所有的gem。 因此,对于Heroku,您必须设置您想要的gem版本,否则Heroku将始终安装最新版本的gem,这可能会导致问题
- 将Gemfile.lock保留在您的项目中,以便您始终知道什么版本的gem会使您的应用程序正常工作。
Gemfile
是Bundler的configuration,用于pipe理应用程序的Ruby依赖项。 该网站包含了很多文档,包括Gemfile手册页 。
我会尽量给出一个简单的答案
比喻解释
假设你想制造一辆车。 从头开始。 现在这将是一场噩梦。 你需要build造:底盘,发动机,执行器,散热器,冷却,通风等等。
gem允许您使用其他人以前制造的汽车零件
但是你并不是唯一一个build造汽车的人。 谁曾经build造过车的人都基本上做了同样的事情。 在那之前,已经有聪明的人出去制造了内燃机等等……其实没关系。
你不需要重新发明轮子。 为什么要自己做,只需要简单地从架子上拿到最好的设备? 如果你能find世界上最有才华的工程师创造的最好的引擎之一,而又不用动手指呢? 你会花一年时间来尝试创造自己的?
所以,基本上,而不是自己做所有事情,你写下你需要的所有部分的购物清单。 这基本上是一个gem文件:
- 劳斯莱斯引擎
- AutoLive安全带
- Michellin轮胎。
- PIAA夜间大灯
- 等等
那我的朋友,基本上是你的gem文件!
你的系统可以有很多的gem…因此可以有多个相同的gem
版本。
一个Gemfile
指定了它们的versions
列表,当你运行你的rails应用程序时,这些versions
将被使用/加载/(如果不存在,安装)。 或任何与bundle exec . .
bundle exec . .
首先,什么是gem?
根据维基百科:
RubyGems是Ruby编程语言的包pipe理器,它提供了一个用于分发Ruby程序和库的标准格式
的Gemfile
Gemfile是我们创build的文件,用于描述Ruby程序的gem依赖关系
现在,用非常简单的话来说:
gem可以被认为是你可以在你的代码中使用的库。 例如: faker gem
你的代码可以使用faker
gem的function来产生假的数据。
现在,您可以列出您的项目在gemfile中需要的所有gem。 当你进行捆绑安装时,gemfile中的所有gem都会为你安装。