我刚刚开始使用rails而且我有点困惑阅读不同的文档,关于何时应该将gem添加到gemfile以及何时应该只是“gem install XXX”
例如,安装rspec和guard-rspec时。我看到有些人会:
gem install rb-fsevent
有些人把它放在他们的gemfile和bundle中。
哪种方式正确,您如何知道选择哪种方式?谢谢!
答案 0 :(得分:3)
Gemfile记录并管理应用程序的所有依赖项。当您在Gemfile中列出gems时,bundler会排除任何版本冲突,并确保您的应用程序使用正确版本的gem。
在新环境中设置应用程序时(例如,当您的同事从版本控制中撤消更改或部署到生产Web服务器时),Bundler可以使用gem文件来确保环境设置 - 完全像你在开发中一样。
因此,您的应用程序所依赖的任何内容(例如,您从应用程序调用的任何代码)都需要位于Gemfile中。这包括用于测试的库(尽管它们可以从生产环境中排除)。
不属于您的应用程序的宝石不需要进入Gemfile。一个例子是guard
,它更像是一个开发工具,而不是一个应用程序依赖。您可以使用gem
命令安装它们。
通常情况下,您要安装的大多数内容可能都需要在Gemfile中。
但是,如果使用gem
命令安装它并不重要。之后你仍然可以把它放在你的Gemfile中,Bundler会知道该怎么做。
答案 1 :(得分:2)
您将在应用程序中使用的所有宝石都应放入Gemfile。
所有将为您的应用程序提供服务的宝石最好不要使用Gemfile。
例如。您需要paperclip
和mysql2
宝石来存储图片和数据,因此请将它们放入Gemfile中。你需要magic_encoding
gem做一些有用的东西。但是,直到您从控制台直接创建它,您在应用程序中不需要它。将其与您的应用分开。
在编写代码时使用测试框架,因此将它们放入Gemfile中。
您使用passenger
gem来部署您的应用,但您永远不需要在代码中使用它 - 不要将其放入Gemfile。