什么是Gemfile在rails中的作用?

52

Gemfile在Rails中的作用是什么?

如何使用Gemfile

5个回答

95
在Rails开发过程中,有时您可能需要提供某些功能,但要么您不知道如何实现,要么您不想自己实现,因为这需要才华横溢的开发人员付出大量工作。这些开发需求(例如用户身份验证、消息系统、资产处理程序、地理位置、分页系统、链接到Amazon AWS等外部服务,以及最后但并非最不重要的Rails本身)称为Ruby Gems。 它们是Ruby软件包,不一定与Rails相关,但由于Rails基于Ruby,98%的gems可以用于您的Rails Web应用程序代码。可以在github上找到很多gems,但通过ruby-gemsruby-toolbox搜索gems更有趣。您的gemfile是您想要包含在项目中的所有gems列表。它与bundler(也是一个gem)一起使用,以安装、更新、删除和管理您使用的gems。

gemfile有另一个用途-您可以将gem分组为:development:test:assets:production等组,Rails将知道何时包含这些gems。例如:

group :development, :test do
    gem "rspec-rails"
    gem "factory_girl_rails"
    gem "guard-rspec"
end

注意,在Rails 4上,assets组已被弃用。
这些gems属于开发环境和测试环境,因为它们是用于测试应用程序的。您不需要在生产环境中使用它们(您可以,但这会不必要地膨胀内存)。
因此,要使用gemfile,只需编写要安装的gem即可。
gem 'devise'

在您的控制台/cmd/ssh中,请先确保安装了bundler(捆绑软件)。

$ gem install bundler

然后在控制台中写入。
bundle install

您会注意到出现了另一个Gemfile!Gemfile.lock这个文件列出了所有的gem及其版本和依赖关系,如果您使用文本阅读器打开它,就能看到这一点。当您需要知道安装的gem的哪些版本时,这将非常有用。
有关 Gemfile 的更多阅读 - 请参阅bundler页面 有关选择 gem 的信息,您可以从此处开始
祝您好运并玩得开心!

好的,那么Gemfile.lock是什么?

Gemfile.lock,顾名思义,是所有已安装的gem版本的锁定。因此,如果需要安装Gemfile,则安装锁定文件以及实际需要的版本来启动应用程序。

如果您没有那个特定版本的gems(如Gemfile.lock中指定的),rails将会报错,您必须通过bundle install安装缺少的gems或手动解决任何冲突(我相信bundler会给您一些提示)。

关于Gemfile.lock的一些要点

  • 如果你不小心删除了它,当你运行bundle install时,它会重新生成。如果你不小心删除了Gemfile,那就倒霉了.. 你应该使用git :)
  • Heroku不关心Gemfile.lock,因为它会重新安装所有的gem。所以对于Heroku来说,你必须设置你想要的gem版本,否则Heroku将始终安装最新版本的gem,这可能会引起问题。
  • 在你的项目中保留Gemfile.lock,这样你就可以始终知道哪个版本的gems可以使你的应用程序正常工作。

我是Rails的新手,你的解释真的很有用! - Leo Le
非常感谢您,@NickGinanto - 您是否也知道Gemfile.lock的目的是什么? - BenKoshy

11

Gemfile 是配置文件,用于 Bundler,它用于管理您的应用程序所需的 Ruby 依赖项。该网站包括许多文档,包括 Gemfile 手册页


4

类比解释

你想从零开始制造一辆汽车,需要制造底盘、发动机、化油器、散热器等。

Gem 可以让你使用别人之前制造的汽车零部件

每个制造汽车的人都需要相同的东西。

没有必要重新发明轮子。为什么自己制造发动机等零部件,当你可以直接从货架上拿到呢?如果你能够得到世界上最有才华的工程师开发的最佳引擎之一,而不费吹灰之力,你会花一年时间试图制作自己的引擎吗?

因此,与其自己制造所有零部件,你最好写下一个购物清单,列出所有需要的零部件:

  • 劳斯莱斯发动机
  • AutoLive 座椅安全带
  • 米其林轮胎
  • PIAA Night 头灯
  • 等等。

我的朋友,这基本上就是你的 gem 文件!


1

您的系统可以拥有许多宝石... 因此可以拥有同一gem的多个版本。

Gemfile指定了gems列表及其versions,每当您运行Rails应用程序或任何带有bundle exec . .的内容时,都将使用/加载/(如果不存在则安装)这些gems


0

首先,什么是 gem?

根据维基百科:

RubyGems 是 Ruby 编程语言的包管理器,提供了一个标准格式来分发 Ruby 程序和库。

Gemfile

Gemfile 是我们创建的一个文件,用于描述 Ruby 程序的 gem 依赖关系。

现在,用非常简单的话来说:

Gem 可以被认为是你可以在代码中使用的库。 例如:faker gem

你的代码可以使用 faker gem 的功能来生成虚假数据。

现在,你可以在 gemfile 中列出你的项目所需的所有 gems。 当你执行 bundle install 时,gemfile 中的所有 gems 都会被安装。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接