2012-08-28 38 views
0

我是一名开发人员,支持Rails中构建的多个应用程序,我经常需要安装gem文件中未包含的gem。如何将所有项目宝石包含到gemfile中?

最后一天我创建了一个项目,当我尝试在另一台计算机上运行它时,我遇到了一些关于缺失宝石的问题,实际上有很多,我不知道从哪里获得所有缺失宝石列表或如何安装它们。

问题是,是否有一种方法可以将项目需要的所有宝石包含到gem文件中,以便下次有人尝试在另一台计算机上运行它时,它将足以使用命令bundle install

+0

有没有一个原因,你没有将这些宝石添加到Gemfile? – janders223

+0

是的,我只添加了我特别安装的宝石(例如paperclip),但是例如如果我的项目使用了主动记录3.2.6以及其他我不会将它们逐一添加到我的宝石文件中,有时我甚至没有意识到我的项目需要的所有宝石,而且与我一起工作的最重要的项目也没有。 也许我做错了,如果有人能指导我,我会感激。 –

+0

Active Record是一个轨道依赖项,所以通过gem'rails',你的Gemfile中的'3.2.6'会自动安装它的依赖关系。当切换到新电脑时,您需要运行'bundle install'来安装所有这些缺失的宝石。 – janders223

回答

0

您需要在您的Gemfile中包含Gems,然后在任何新机器上运行bundle install以安装这些Gems及其依赖关系。例如:

源“https://rubygems.org”

gem 'rails', '3.2.6' 
gem 'jquery-rails' 
gem 'mongoid' 
gem 'devise' 
gem 'cancan' 

有了这个例子中,当捆绑安装轨轨,如活动记录,行动宝盒等等的所有依赖将被安装。剩下的宝石和它们的依赖关系也是一样。

如果你正在计划,而且看起来你是,花费很多时间与铁轨,你应该真正阅读Bundler

+0

我可以说,从经验(使用rails 3.1.3')Bundler并不总是按预期工作 - 我发现你第一次在机器上运行它,它通常下载所有的宝石和它们的依赖关系 - 然而,在那之后,它看起来很挑剔,而且'bundle install'有很多问题没有得到所有需要的宝石。有时你可能还需要删除'Gemfile.lock'文件(捆绑器会重新创建),或者尝试运行'bundle update'来强制更新。我同意@ janders223 - 了解宝石的包装方式真的很有用:) – Krista

+0

尽管我不反对Bundler可以挑剔,但我不同意删除.lock文件。 Gemfile.lock是当时正在运行的宝石的特定版本中的“锁定”。由于Gems是开源的,它们经常更新,并且经常引入难以诊断的非向后兼容的突变。运行“捆绑更新”对于特定的宝石来说是一个比完整更新更好的解决方案,因为你不知道什么会在一起玩,哪些不会。 – janders223

+0

嗯,我当然同意你的观点,很多宝石都会经常变化,并且可能是非向后兼容的 - 我想我已经发现删除'.lock'文件是一个很好的解决方案,因为我们指定了我们使用的宝石版本,删除锁文件强制捆绑器重新分析的东西。不过,我完全同意你的看法,如果你没有指定特定的宝石版本,它可能会适得其反。 – Krista

相关问题