在 Rails 中 Gemfile 有啥用?
Posted
技术标签:
【中文标题】在 Rails 中 Gemfile 有啥用?【英文标题】:What is the use of Gemfile in rails?在 Rails 中 Gemfile 有什么用? 【发布时间】:2012-12-13 22:01:36 【问题描述】:Gemfile
在 rails 中有什么用?
Gemfile
怎么用?
【问题讨论】:
【参考方案1】:类比说明
你想造一辆汽车。从头开始。您需要构建:底盘、发动机、确认器、散热器等。
宝石可让您利用其他人以前制作的汽车零件
每个曾经造过汽车的人都需要同样的东西。
您无需重新发明***。当您可以直接从货架上得到它时,为什么要制造自己的引擎等?如果您可以毫不费力地获得由世界上最有才华的工程师创造的最好的引擎之一怎么办?你会花一年时间尝试自己制作吗?
所以基本上不是自己做所有东西,而是写下你需要的所有零件的购物清单:
劳斯莱斯发动机 AutoLive 安全带 米其林轮胎。 PIAA 夜间大灯 等等等等我的朋友,基本上就是你的gem文件!
【讨论】:
【参考方案2】:首先,什么是宝石?
根据***:
RubyGems 是 Ruby 编程语言的包管理器, 为分发 Ruby 程序和提供标准格式 图书馆
宝石文件
Gemfile 是我们创建的用于描述 gem 的文件 Ruby 程序的依赖项
现在,用非常简单的话来说:
Gem 可以被认为是您可以在代码中使用的库。 示例:faker gem
您的代码可以使用faker
gem 的功能来生成虚假数据。
现在您可以在 gemfile 中列出您的项目所需的所有 gem。 当您进行捆绑安装时,您的 gemfile 中的所有 gem 都会为您安装。
【讨论】:
【参考方案3】:在 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 :)
Heroku 不关心 Gemfile.lock,因为它会重新安装所有 gem。因此对于 Heroku,您必须设置所需的 gem 版本,否则 Heroku 将始终安装最新版本的 gem,这可能会导致问题
将 Gemfile.lock 保留在您的项目中,以便您始终知道哪些版本的 gem 可以让您的应用正常运行。
【讨论】:
我是 Rails 新手,你的解释真的很有用! 非常感谢@NickGinanto - 你也知道 Gemfile.lock 的用途吗?【参考方案4】:您的系统可以有很多宝石......因此可以有多个版本的相同gem
。
Gemfile
指定gems
及其versions
的列表,当您运行您的rails 应用程序时应使用/加载/(如果不存在则安装)。或任何bundle exec . .
【讨论】:
【参考方案5】:Gemfile
s 是Bundler 的配置,用于管理应用程序的 Ruby 依赖项。该网站包含大量文档,包括Gemfile manual page。
【讨论】:
以上是关于在 Rails 中 Gemfile 有啥用?的主要内容,如果未能解决你的问题,请参考以下文章
在 Gemfile 中指定 rubygem 时 ~> 和 >= 有啥区别?
Rails:Gemfile.lock 需要“找不到捆绑程序”(2.2.11)。 (Gem::GemNotFoundException)
为什么gem`therubyracer`默认在Gemfile中注释掉了?
Ruby on Rails 中的 Gemfile 和 Gemfile.lock 有啥区别
在将数据库引擎升级到 PostgreSQL 12 时,是不是也应该为“pg”gem 更新 Gemfile?它们有啥关系?