【发布时间】:2012-12-13 22:01:36
【问题描述】:
Gemfile 在 rails 中有什么用?
Gemfile怎么用?
【问题讨论】:
标签: ruby-on-rails ruby gemfile
Gemfile 在 rails 中有什么用?
Gemfile怎么用?
【问题讨论】:
标签: ruby-on-rails ruby gemfile
类比说明
你想造一辆汽车。从头开始。您需要构建:底盘、发动机、确认器、散热器等。
宝石可让您利用其他人以前制作的汽车零件
每个曾经造过汽车的人都需要同样的东西。
您无需重新发明轮子。当您可以直接从货架上得到它时,为什么要制造自己的引擎等?如果您可以毫不费力地获得由世界上最有才华的工程师创造的最好的引擎之一怎么办?你会花一年时间尝试自己制作吗?
所以基本上不是自己做所有东西,而是写下你需要的所有零件的购物清单:
我的朋友,基本上就是你的gem文件!
【讨论】:
首先,什么是宝石?
根据维基百科:
RubyGems 是 Ruby 编程语言的包管理器, 为分发 Ruby 程序和提供标准格式 图书馆
宝石文件
Gemfile 是我们创建的用于描述 gem 的文件 Ruby 程序的依赖项
现在,用非常简单的话来说:
Gem 可以被认为是您可以在代码中使用的库。 示例:faker gem
您的代码可以使用faker gem 的功能来生成虚假数据。
现在您可以在 gemfile 中列出您的项目所需的所有 gem。 当您进行捆绑安装时,您的 gemfile 中的所有 gem 都会为您安装。
【讨论】:
在 Rails 开发过程中,有时您会想要提供一些您需要的功能,但您不知道该怎么做,或者您不想自己实现它,因为才华横溢的开发人员已经为它的开发投入了大量工作。
您可能需要的这些开发(用户身份验证、消息系统、资产处理程序、地理定位、分页系统、链接到外部服务(如 Amazon AWS)以及最后但并非最不重要的 Rails 本身)称为 Ruby Gems。这些是 ruby 软件包,不一定与 Rails 相关,但由于 Rails 基于 Ruby,98% 的 gem 可用于 Rails webapp 代码。
在github 中可以找到很多宝石,但通过ruby-gems 或ruby-toolbox 搜索宝石更有趣
您的gemfile 是您想要包含在项目中的所有 gem 的列表。
它与bundler(也是一个gem)一起用于安装、更新、删除和以其他方式管理您使用的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 属于开发环境和测试环境,因为它们用于测试应用程序。你不需要它们在生产环境中可用(你可以,但这会不必要地膨胀内存)。
所以 - 要使用 gemfile,只需编写您希望安装的 gem,例如
gem 'devise'
确保事先安装bundler(在您的控制台/cmd/ssh 中)
$ gem install bundler
然后在控制台中写入
bundle install
你会注意到另一个 gemfile 出现了! Gemfile.lock
这个文件,如果你用文本阅读器打开它,你会看到它列出了你所有的 gem 及其版本和依赖项。当您需要知道您安装了哪些版本的 gem 时,这将非常有用。
更多阅读Gemfile - read on the bundler page
有关挑选宝石的信息,您可以从this开始
祝你好运,玩得开心!
好的,那么创建的 Gemfile.lock 是什么?
Gemfile.lock,顾名思义,是对已安装的所有 gem 的所有版本的锁定。因此,如果 Gemfile 是需要安装的文件,那么锁定文件就是已安装的文件以及启动和运行应用程序实际需要的版本。
如果您没有该特定版本中的 gem(如 Gemfile.lock 中指定),rails 会抱怨,您将不得不安装丢失的 gem(通过 bundle install)或手动修复任何冲突(我相信bundler 会给你一些线索)
关于Gemfile.lock的一些须知
bundle install时重新生成。如果你不小心删除了Gemfile,那你就倒霉了。你应该使用 git :)【讨论】:
您的系统可以有很多宝石......因此可以有多个版本的相同gem。
Gemfile 指定gems 及其versions 的列表,当您运行您的rails 应用程序时应使用/加载/(如果不存在则安装)。或任何bundle exec . .
【讨论】:
Gemfiles 是Bundler 的配置,用于管理应用程序的 Ruby 依赖项。该网站包含大量文档,包括Gemfile manual page。
【讨论】: